如何迭代C++字符串向量?

Sim*_*ity 19 c++ loops vector

如何迭代这个C++向量?

vector<string> features = {"X1", "X2", "X3", "X4"};

Ron*_*nis 34

试试这个:

for(vector<string>::const_iterator i = features.begin(); i != features.end(); ++i) {
    // process i
    cout << *i << " "; // this will print all the contents of *features*
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是C++ 11,那么这也是合法的:

for(auto i : features) {
    // process i
    cout << i << " "; // this will print all the contents of *features*
} 
Run Code Online (Sandbox Code Playgroud)

  • [不,它不是!](http://stackoverflow.com/questions/24901/is-there-a-performance-difference-between-i-and-i-in-c)你应该使用` const_iterator`不仅仅是一个`iterator`.这是锅炉板代码,你应该好好学习它,即使被问到睡着了也应该把它弄好. (10认同)
  • @Als - 这是旧信息.当前的编译器没有问题,可以使用operator ++ for std :: vector,并优化掉任何未使用的副本. (4认同)
  • 我相信在这种情况下,如果它是++ i或i ++并不重要,因此没有"正确"或"不正确"的方式甚至"更好"的编码方式.鉴于此上下文,post和pre增量之间没有区别. (3认同)

Kon*_*lph 11

如果编译,您使用的C++ 11允许以下内容:

for (string& feature : features) {
    // do something with `feature`
}
Run Code Online (Sandbox Code Playgroud)

这是基于范围的for循环.

如果您不想改变该功能,您也可以将其声明为string const&(或只是string,但这将导致不必要的副本).