为什么我在"For"和"While"之间得到不同的结果?

ana*_*y99 0 c++ vector

所以,我正在研究一个检测点坐标的项目.

我从中提取检测到的坐标std::vector<cv::Point> dots并将x和y坐标中的每一个存储到std::vector<int> dotsXstd::vector<int> dotsY.(我知道我可以使用dots.xdots.y代替,但那不是我想要的)

每当我想打印输出时,我在for循环和while循环之间得到不同的结果来显示值向量.举个例子:

检测到的X坐标为15,20,50,检测到的Y坐标为2,10,20.

如果我使用for循环:

for(int x=0;x < dotsX.size();x++)
{
     std::cout << dotsX[x] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是相同的:15,20,50.

但是,如果我使用while循环:

int x=0;
while(dotsX[x])
{
    std::cout << dotsX[x] << std::endl;
    x++;
}
Run Code Online (Sandbox Code Playgroud)

输出很奇怪:15,20,50,32.它总有一个额外的值(比如值32,有时是10201或4等).

我不知道为什么会这样.

任何帮助将不胜感激.谢谢

And*_*owl 6

第二个例子有未定义的行为,因为它总是最终访问一个越界元素dotsX.

要使其与for循环相同,请将其更改为:

while(x < dots.size())
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

还要注意,C++有更多惯用的方法来迭代容器.特别是,C++ 11具有基于范围的for循环,这使您无法使用索引或迭代器:

for (int x : dotsX) { std::cout << x << std::endl; }
Run Code Online (Sandbox Code Playgroud)