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

如何通过[]运算符访问std::unique_ptr<std::vector<int>>中的vector元素?

解决std::unique_ptr<std::vector<int>>的元素访问问题

嘿,这个坑我之前踩过!你遇到的错误是因为std::unique_ptr本身并没有重载[]运算符——你直接写x[0]是在试图对智能指针对象本身使用下标,而不是它指向的vector容器,这当然会报错。

要正确访问内部vector的元素,你需要先获取到智能指针指向的vector对象,有几种常用方法:

方法1:解引用智能指针后使用[]

这是最直观的写法,用*解引用unique_ptr拿到底层的vector,再用[]访问元素:

(*x)[0] = 1;

方法2:用箭头运算符调用vector的operator[]

因为unique_ptr重载了->运算符,可以直接访问指向对象的成员/运算符,你也可以显式调用vector的operator[]:

x->operator[](0) = 1;

不过这种写法不如第一种简洁,实际开发中用得不多。

额外推荐:用at()做安全访问

如果想避免越界访问的未定义行为,推荐使用vector的at()方法,它会做边界检查,越界时抛出std::out_of_range异常:

x->at(0) = 1;

注意:一定要先初始化智能指针!

你的原代码里x是一个空的unique_ptr(没有指向任何有效的vector),哪怕你用了上面的正确写法,也会触发未定义行为(大概率程序崩溃)。所以必须先让它指向一个有效的vector,比如用std::make_unique初始化:

std::unique_ptr<std::vector<int>> x = std::make_unique<std::vector<int>>(5); // 初始化一个包含5个元素的vector

完整修正后的代码

#include <memory>
#include <vector>

int main() {
    // 初始化智能指针,指向一个有5个默认初始化元素的vector
    std::unique_ptr<std::vector<int>> x = std::make_unique<std::vector<int>>(5);
    
    // 方法1:解引用后用[]
    (*x)[0] = 1;
    // 方法2:显式调用operator[]
    x->operator[](1) = 2;
    // 安全访问:用at()
    x->at(2) = 3;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:59