向量、迭代器和 const_iterator
Posted
技术标签:
【中文标题】向量、迭代器和 const_iterator【英文标题】:Vector, iterators and const_iterator 【发布时间】:2015-09-21 13:37:01 【问题描述】:我刚刚开始学习向量和迭代器。我无法理解 2 件事。为什么可以更改常量迭代器,“*”的作用是什么?
#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;
【问题讨论】:
任何迭代器都可以改变值,除非它被声明为const
。 const_iterator
将“指向”的对象称为const
。 *
是检索迭代器“指向”的值。
const_iterator
并不意味着迭代器是一个常量,而是你不能改变它所引用的项目。
该代码是正确的。我只是无法忍受为什么“iter”,即 const_iterator,可以改变他的价值,我无法理解你对“*”的意思
我想我应该阅读更多内容以了解您想说什么。
@owacoder - 不要把这个可怜的家伙和指针搞混了。他们很难!严格来说,指针是一种随机访问迭代器。不是反过来。 :-)
【参考方案1】:
当您执行iter = inventory.begin()
时,它会使iter
引用向量中的第一个字符串。 iter++
移动它以引用下一个字符串。
在输出中,您使用*iter
作为访问iter
引用的字符串的方式。第一个输出将是inventory1
。
关于 constness 的轻微混淆是
vector<string>::const_iterator iter;
是一个迭代器,它指代不变的事物,而
const vector<string>::iterator iter;
将使迭代器本身保持不变,但允许您修改它所引用的对象。
【讨论】:
那么,我用*让迭代器输出它?在此之前,它仅指代但带有 * 我给他访问权限? 但是这里的作用是什么?:'myIterator = inventory.begin(); *myIterator = "inventory4"; cout 【参考方案2】:为什么我可以改变常量迭代器
您有一个vector<string>::const_iterator
类型的非const
迭代器。您可以更改它,因为它不是const
。成为const_iterator
意味着取消引用它会返回对对象的const
引用。这意味着引用的对象不能被修改。
迭代器不是const
,因为vector<string>::const_iterator
类型没有const
限定符。
“*”的作用是什么
它是解引用操作符。它返回迭代器当前正在定位的对象。更准确地说,它返回对对象的引用。它的另一个名称是间接运算符。
【讨论】:
以上是关于向量、迭代器和 const_iterator的主要内容,如果未能解决你的问题,请参考以下文章