You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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”:vector的[]返回string对象,string的[]返回char,和vector的[]返回char是同一个逻辑。

内容的提问来源于stack exchange,提问作者Bibek Chand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:17