所以,我正在研究一个检测点坐标的项目.
我从中提取检测到的坐标std::vector<cv::Point> dots并将x和y坐标中的每一个存储到std::vector<int> dotsX和std::vector<int> dotsY.(我知道我可以使用dots.x或dots.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等).
我不知道为什么会这样.
任何帮助将不胜感激.谢谢
第二个例子有未定义的行为,因为它总是最终访问一个越界元素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)