C 与查找功能一起使用时,迭代器为什么行为会有所不同

C++ Why does the iterators behave differently when used with the find function?

本文关键字:为什么 迭代器 有所不同 查找 功能 一起      更新时间:2023-10-16

为什么每次在while循环中构造IT1时,以下代码片段会表现出奇怪的行为?在VS 2015中,循环不会终止。使用GCC 4.9,它在第一个后打印空白。如果我不在while循环内构造IT1,则循环可以按预期工作?迭代器是否进行某种懒惰的评估?

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
int main () { 
  std::string S("Hello world, the, quick, brown, fox, jumps, over");
  std::vector<char> V(S.begin(), S.end());
  std::vector<char>::const_iterator it = V.cbegin();
  std::vector<char>::const_iterator it1 = std::find(it, V.cend(), ',');
  while (it1 != V.cend()) {
    std::cout <<"the string is: " << std::string(it, it1) << std::endl;
    it = ++it1;
    std::vector<char>::const_iterator it1 = std::find(it, V.cend(), ',');
    //it1 = std::find(it, V.cend(), ',');
  }  
}

,如果您想找到所有令牌,并且您的程序没有cicle,则需要将iterator提高到正确的位置,例如:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
int main () {
    std::string S("Hello world, the, quick, brown, fox, jumps, over,,");
    std::vector<char> V(S.begin(), S.end());
    std::vector<char>::const_iterator it = V.cbegin();
    std::vector<char>::const_iterator it1 = std::find(it, V.cend(), ',');
    while (it != V.cend()) {
        std::cout << "The string is: " << std::string(it, it1) << std::endl;
        it = ++it1;
        it1 = std::find(it, V.cend(), ',');
    }
}