为什么 string::begin 存在?

Jai*_*vat 2 c++ iterator stl stdstring

如果我理解正确,则string::begin返回指向字符串中第一个元素的指针。如果是这样,我们为什么不直接使用 &str来获取指针。

是否存在使用begin更好的情况,或者我误解了它的功能?

JaM*_*MiT 5

如果我理解正确,则string::begin返回指向字符串中第一个元素的指针。

不,它返回一个迭代器到字符串中的第一个元素。它有助于std::string与设计用于标准容器的语言结构(想想模板)兼容。

为什么我们不只是&str用来获取指针。

一方面,那不是字符串第一个元素的地址?假设str是一个类型的变量std::string,这将是一个对象的地址,除其他外,(通常)持有指向字符串第一个元素的指针。(如果您指的是c_str()成员函数,那么可以这样做,但这不是一种特别清晰易读的语法。)

  • @Kostas 我选择了 `c_str` 因为它的名字与 `str` 类似。无论如何,“c_str()”和“data()”执行与 C++11 相同的功能。 (2认同)