Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在“常量向量”上迭代<;int>;`?_C++_Std - Fatal编程技术网

C++ 是否可以在“常量向量”上迭代<;int>;`?

C++ 是否可以在“常量向量”上迭代<;int>;`?,c++,std,C++,Std,是否可以在常量向量上迭代?或者,这是不可取的吗 如果我有一个函数getIntVector,它返回一个vector,我可以使用以下内容对其进行迭代: vector<int> vec = getIntVector(); vector<int>::iterator it; for (it=vec.begin();it!=vec.end();++it) {} const vector<int> vec = getIntVector(); vector<int

是否可以在常量向量上迭代?或者,这是不可取的吗

如果我有一个函数
getIntVector
,它返回一个
vector
,我可以使用以下内容对其进行迭代:

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) {} 
vector-vec=getIntVector();
向量::迭代器;
对于(it=vec.begin();it!=vec.end();++it){}
但我不能做到以下几点:

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 vector vec=getIntVector();
向量::迭代器;
//编译器在下面抛出错误
对于(it=vec.begin();it!=vec.end();++it){}
我的想法是,将向量声明为
const

可以使用
vector::const\u迭代器来重新创建它。

可以使用
vector::const\u迭代器
1)您需要一个


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

如果您使用的是C++11,您可以使用
auto
,并让编译器从初始化中推断类型,如下所示:

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

但是,在C++03中,您必须使用
const\u迭代器

const\u迭代器
啊,谢谢。你能解释为什么它仍然会被复制吗?你说的“我喜欢返回引用”是指返回指向原始向量的指针吗?谢谢。@Ross,@Ross不管你做什么,都不要返回对局部变量的引用。我不会的。返回向量的函数是一个外部库,所以我试图优化如何处理快速迭代。欢迎您提出任何建议,或者如果我无中生有地大惊小怪,那么最好了解一下……或者如果您根本不关心
它,只想快速迭代,那么只需
for(int I:getIntVector())