为何vector<string>元素赋值获完整字符串,string元素赋值仅得单个字符?
#include "iostream" #include "vector" #include "string.h" using namespace std; int main() { vector<string> myvect; string temp; string temp2; for (int i = 0; i < 2; i++) { cin >> temp; myvect.push_back(temp); } for (int i = 0; i < 2; i++) { temp2 = myvect[i]; cout << temp2 << endl; } }
问题
在上述C++代码中,执行temp2 = myvect[i]时,temp2会被赋予完整的string对象;但执行temp2 = temp[i]时,仅会被赋予string中的单个字符。为何两者结果不同?难道string不是指向其首元素的吗?
回答
这俩操作结果不同,核心是操作的对象类型完全不一样:
myvect是vector<string>类型的容器,它存储的是一个个完整的string对象,myvect[i]取出的是容器里第i个string对象,和temp2的类型(string)完全匹配,所以赋值后temp2就是完整的字符串。temp本身是string对象,它的[]运算符是C++标准库专门重载的,作用是访问字符串内部第i个单个字符(char类型)。当把char类型的值赋值给string类型的temp2时,string会自动用这个字符创建一个仅包含该字符的新字符串,所以最终temp2里只有单个字符。
别搞错了,string不是指向首元素的指针,它是一个封装了字符存储逻辑的类——内部帮你管理字符数组的内存、长度等细节,但它本身是个完整的对象,不是指针。你可以把它类比成“专门存储字符的vector[]返回string对象,string的[]返回char,和vector[]返回char是同一个逻辑。
内容的提问来源于stack exchange,提问作者Bibek Chand
相关产品推荐
相关产品推荐

