gpt4 book ai didi

c++ - 在 C++ 中, "const_iterator"与 "const iterator"相同吗?

转载 作者:行者123 更新时间:2023-12-04 16:35:47 26 4
gpt4 key购买 nike

const_iterator 是否与const iterator 相同?如果不是有什么区别?如果是,为什么标准在 const iterator 已经有意义时使用 const_iterator

例如,这两个声明是否完全相同?

string& replace (const_iterator i1, const_iterator i2, const string& str);

string& replace (const iterator i1, const iterator i2, const string& str);

最佳答案

不,它们不一样。

与任何 const 对象一样,您不能对 const iterator 进行更改:

// ++it gives error below since we try to change it:
for(const std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {}

但是,您可以更改 const iterator 指向的对象的值:

// this is ok (assuming there is at least one element in the vector):
const std::vector<int>::iterator it = vec.begin();
*it = 10;

const_iterator 是可变的,但您不能更改迭代器指向的对象:

// ++it is ok below:
for(std::vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it) {
*it = 10; // error: `*it` is an `int const&`
}

使用 const const_iterator,您既不能更改迭代器也不能更改它指向的内容。

const std::vector<int>::const_iterator it = vec.begin();
++it; // error
*it = 10; // error
std::cout << *it << '\n'; // ok

一个构造的例子来说明:

struct foo {
using const_iterator = char const*;
using iterator = char*;

const_iterator cbegin() const { return data; };
const_iterator cend() const { return data + sizeof data; };
const_iterator begin() const { return cbegin(); }
const_iterator end() const { return cend(); }
iterator begin() { return data; };
iterator end() { return data + sizeof data; };

char data[2];
};

如上所示,const_iteratoriterator 是用户定义的类型定义。只有按照惯例,名称才会被称为它们所称的名称。使用这些约定的名称也有助于创建容器,这些容器应该与其他类一起工作,因为这些类型定义通常用于创建或指定实例/类型。名称 const_iteratoriterator 并没有给这些别名 任何 特殊属性。这完全取决于类(class)的创建者。

关于c++ - 在 C++ 中, "const_iterator"与 "const iterator"相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70028107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com