向量,迭代器和const_iterator

gpr*_*rex 3 c++ iterator vector

我刚刚开始学习向量和迭代器。我不明白两件事。为什么可以更改常量迭代器,“ *”的作用是什么?

#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;
    }
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 5

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

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

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

“*”的作用是什么

它是解引用运算符。它返回迭代器当前正在定位的对象。更确切地说,它返回对对象的引用。它的另一个名称是间接运算符


Bo *_*son 5

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

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

关于常数的一点困惑是

vector<string>::const_iterator   iter;
Run Code Online (Sandbox Code Playgroud)

是一个迭代器,它引用不变的事物,而

const vector<string>::iterator   iter;
Run Code Online (Sandbox Code Playgroud)

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