gpt4 book ai didi

c++ - vector 迭代器和停止条件

转载 作者:行者123 更新时间:2023-11-28 06:44:32 26 4
gpt4 key购买 nike

我的无限循环“for”的停止条件有问题。我已经为两个 vector 声明了两个迭代器。这些 vector 可能包含不同数量的元素( vector 的大小不相等 - 大多数情况下)。

好的,这是我的一段代码:

vector<int> even;
vector<int> odd;
vector<int>::iterator itEven;
vector<int>::iterator itOdd;

顾名思义, vector 存储偶数和奇数。用数据填充 vector 后,我想交替显示两个 vector 的内容。我在这里做:

for(itEven = even.begin(), itOdd = odd.begin() ;; itEven ++, itOdd ++){
if(itEven != even.end())
printf("%d ", *itEven);
if(itOdd != odd.end())
printf("%d ", *itOdd);
if(itEven == even.end() && itOdd == odd.end())
break;
}

我的 break 指令只有在 vector 包含相同数量的元素时才有效。例如,当第一个 vector 包含一个元素而第二个 vector 包含三个元素时,出现了问题,我得到了无限循环。

我希望我对问题的描述对您来说很清楚,感谢您的任何回复和帮助。

最佳答案

如果两个 vector 的大小不同,您的代码有未定义的行为:

在您的 for 循环中,即使迭代器超出了 end() ,您也会递增迭代器:

 itEven ++, itOdd ++ // Once you reach the end of one, you continue to increment its iterator

其中一个(较小 vector 的迭代器)永远不会通过您的测试:

if(itEven == even.end() && itOdd == odd.end())
break;

你只想做这些增量直到每个的 end(),可能在 while() 循环中,像这样:

while(true){
if(itEven != even.end())
printf("%d ", *itEven++);
if(itOdd != odd.end())
printf("%d ", *itOdd++);
if(itEven == even.end() && itOdd == odd.end())
break;
}

注意:

优先使用 std::cout 而不是 printf

关于c++ - vector 迭代器和停止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com