Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量、迭代器和常量迭代器_C++_Vector_Iterator - Fatal编程技术网

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;