C++ 为什么可以';我不能用迭代器访问常量向量吗?

C++ 为什么可以';我不能用迭代器访问常量向量吗?,c++,stl,vector,constants,C++,Stl,Vector,Constants,我的例子如下。我发现问题在于函数void test的参数中的“const”。我不知道为什么编译器不允许。有人能告诉我吗?谢谢 vector<int> p; void test(const vector<int> &blah) { vector<int>::iterator it; for (it=blah.begin(); it!=blah.end(); it++) { cout<<*it<<"

我的例子如下。我发现问题在于函数void test的参数中的“const”。我不知道为什么编译器不允许。有人能告诉我吗?谢谢

vector<int> p;

void test(const vector<int> &blah)
{
   vector<int>::iterator it;
   for (it=blah.begin(); it!=blah.end(); it++)
   {
      cout<<*it<<" ";
   }
}

int main()
{
   p.push_back(1);
   p.push_back(2);
   p.push_back(3);
   test(p);

   return 0;
}
向量p;
无效测试(常量向量和blah)
{
向量::迭代器;
for(it=blah.begin();it!=blah.end();it++)
{

cout将
迭代器定义为返回对所包含对象的引用。如果允许,这将破坏向量的常量。请改用
常量迭代器。

向量::常量迭代器在linux平台上使用qt creator进行了尝试,但没有常量_iterator@yan所有STL容器都有
const\u iterate或者
。与其声明类似于
vector::iterator
,不如声明
vector::const\u iterator
。它将出现在任何符合标准的STL实现中。gcc拥有它。visual studio拥有它。在这一点上,我希望任何刚刚发布的编译器都会拥有它。如果没有它,我会感到震惊。哟Jonathan,任何符合标准的实现都有STL容器上的声明/定义。不符合STL的容器可以自由地执行它们认为合适的操作…@Nathan True。但是,它们也不一定会声明迭代器。在这两种情况下,yan都没有提到他用的不是什么容器,只是IDE。所以,我假设他说的是STL容器。如果不是,那就完全不同了。