【问题标题】:Vector, iterators and const_iterator向量、迭代器和 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;
    }

【问题讨论】:

  • 任何迭代器都可以改变值,除非它被声明为constconst_iterator 将“指向”的对象称为const* 是检索迭代器“指向”的值。
  • const_iterator 并不意味着迭代器是一个常量,而是你不能改变它所引用的项目。
  • 该代码是正确的。我只是无法忍受为什么“iter”,即 const_iterator,可以改变他的价值,我无法理解你对“*”的意思
  • 我想我应该阅读更多内容以了解您想说什么。
  • @owacoder - 不要把这个可怜的家伙和指针搞混了。他们很难!严格来说,指针是一种随机访问迭代器。不是反过来。 :-)

标签: c++ vector iterator


【解决方案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&lt;string&gt;::const_iterator 类型的非const 迭代器。您可以更改它,因为它不是const。成为const_iterator 意味着取消引用它会返回对对象的const 引用。这意味着引用的对象不能被修改。

迭代器不是const,因为vector&lt;string&gt;::const_iterator 类型没有const 限定符。

“*”的作用是什么

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

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2020-12-22
    • 2011-07-03
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2011-09-28
    相关资源
    最近更新 更多