向量,迭代器和const_iterator

时间:2015-09-21 13:37:02

标签: c++ vector iterator

我刚开始学习矢量和迭代器。我无法理解两件事。为什么我可以更改常量迭代器以及" *"的作用是什么?

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    vector<string> inventory;
    inventory.push_back("inventory1");
    inventory.push_back("inventory2");
    inventory.push_back("inventory3");
    vector<string>::iterator myIterator;
    vector<string>::const_iterator iter;
    cout << "Your items:\n";
    for (iter = inventory.begin(); iter != inventory.end(); iter++)
    {
        cout << *iter << endl;
    }

2 个答案:

答案 0 :(得分:3)

  

为什么我可以更改常量迭代器

您有一个const类型的非vector<string>::const_iterator迭代器。您可以更改它,因为它不是const。作为const_iterator意味着取消引用它会返回对象的const引用。这意味着无法修改引用的对象。

迭代器不是const,因为类型vector<string>::const_iterator没有const限定符。

  

&#34; *&#34;

的作用是什么

解除引用运算符。它返回迭代器当前所针对的对象。更准确地说,它返回对象的引用。它的另一个名称是间接运算符

答案 1 :(得分:3)

执行iter = inventory.begin()时,iter会引用向量中的第一个字符串。 iter++移动它以引用下一个字符串。

在输出中,您使用*iter作为访问iter引用的字符串的方式。在第一个输出中inventory1

关于常量的轻微混淆是

vector<string>::const_iterator   iter;

是一个迭代器,它引用的是常量,而

const vector<string>::iterator   iter;

会使迭代器本身保持不变,但允许您修改它引用的对象。