是否可以迭代`const vector <int>`?</int>

时间:2012-07-08 19:26:50

标签: c++ std

是否可以迭代const vector<int>?或者,这是否是不受欢迎的?

鉴于我有函数getIntVector,它返回vector<int>我可以使用以下内容迭代它:

vector<int> vec = getIntVector();
vector<int>::iterator it;
for (it=vec.begin();it!=vec.end();++it) {} 

但我无法做到以下几点:

const vector<int> vec = getIntVector();
vector<int>::iterator it;
// complier throws error below
for (it=vec.begin();it!=vec.end();++it) {} 

我的想法是,不会通过将其声明为const来重新创建向量....

4 个答案:

答案 0 :(得分:7)

1)您需要vector<int>::const_iterator来遍历“const”容器

2)你的矢量仍然会被复制;这可能是也可能不是可取的。我想返回引用...

答案 1 :(得分:7)

如果您正在使用C ++ 11,则可以使用auto,并让编译器从初始化中推断出类型:

for (auto it=vec.begin(); it!=vec.end(); ++it) 
   //^^^^ compiler will infer the type using the initialization expression

但是,在C ++ 03中,您必须使用const_iterator

答案 2 :(得分:5)

答案 3 :(得分:4)

您可以使用vector<int>::const_iterator