C++ 向量、迭代器和常量迭代器
我刚刚开始学习向量和迭代器。我不明白两件事。为什么我可以更改常量迭代器?“*”的作用是什么C++ 向量、迭代器和常量迭代器,c++,vector,iterator,C++,Vector,Iterator,我刚刚开始学习向量和迭代器。我不明白两件事。为什么我可以更改常量迭代器?“*”的作用是什么 #包括 #包括 #包括 使用名称空间std; int main() { 病媒清查; 库存。推后(“库存1”); 库存。推后(“库存2”); 库存。推后(“库存3”); 向量::迭代器myIterator; 向量::常量迭代器iter; 库特 为什么我可以更改常量迭代器 您有一个常量迭代器,类型为向量::常量迭代器。您可以更改它,因为它是非常量。作为常量迭代器意味着取消引用它会返回对对象的常量引用。这意味着
#包括
#包括
#包括
使用名称空间std;
int main()
{
病媒清查;
库存。推后(“库存1”);
库存。推后(“库存2”);
库存。推后(“库存3”);
向量::迭代器myIterator;
向量::常量迭代器iter;
库特
为什么我可以更改常量迭代器
您有一个常量
迭代器,类型为向量::常量迭代器
。您可以更改它,因为它是非常量
。作为常量迭代器
意味着取消引用它会返回对对象的常量
引用。这意味着引用的对象无法修改
迭代器是非常量的,因为类型vector::const_迭代器
没有常量限定符
“*”的作用是什么
它是解引用运算符。它返回迭代器当前所处的对象。更准确地说,它返回对该对象的引用。它的另一个名称是间接运算符。当您执行iter=inventory.begin()时
它使iter
引用向量中的第一个字符串。iter++
移动它以引用下一个字符串
在输出中,您使用*iter
作为访问iter
引用的字符串的方式。在第一个输出中将是inventory1
关于常数的一点小小的困惑是
vector<string>::const_iterator iter;
vector::const_迭代器iter;
是一个迭代器,它引用常量,而
const vector<string>::iterator iter;
常量向量::迭代器iter;
将使迭代器本身保持常量,但允许您修改它引用的对象。任何迭代器都可以更改值,除非声明为
const
。const\u迭代器
将被“指向”的对象称为const
。*
用于检索迭代器“指向”的值to.const_迭代器
并不意味着迭代器是一个常数,但你不能改变它所指的项。这段代码是正确的。我只是无法理解为什么作为const_迭代器的“iter”可以改变他的值,我无法理解你对“*”的意思我想我应该读更多的书来理解你想说什么。@owacoder-不要把可怜的家伙和指针混淆起来。它们很难!严格来说,指针是一种随机访问迭代器。不是相反。:-)所以,我让迭代器输出它?在那之前它只引用,但我给他访问权限?但这是什么呢这里的角色?:'myIterator=inventory.begin();*myIterator=“inventory4”cout
const vector<string>::iterator iter;