我刚开始学习矢量和迭代器。我无法理解两件事。为什么我可以更改常量迭代器以及" *"的作用是什么?
#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;
}
答案 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;
会使迭代器本身保持不变,但允许您修改它引用的对象。