为什么 string::begin 存在?

Why does string::begin exist?

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

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

std::string::begin() returns 指向字符串第一个字符的迭代器。迭代器是指针的泛化,充当容器和算法之间的粘合剂,因此可以将两者解耦。

If I understand correctly, string::begin returns the pointer to the first element in the string.

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

why wouldn't we just use &str to get the pointer.

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