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

如何获取list<vector<T>>中的vector且避免数据拷贝?

避免拷贝获取list中vector的方法

你当前的代码会拷贝整个vector,确实没必要,有两种常用的无拷贝方案:

1. 直接使用引用/指针访问原元素

如果只是需要读取或修改list里的原vector,完全不需要拷贝,直接用引用绑定或者取指针就行:

引用方式(推荐)

list<vector<T>> alist;
list<vector<T>>::iterator iter = alist.begin();

// 用引用直接绑定到list中的vector,无拷贝
vector<T>& vec = *iter;

之后对vec的所有操作都会直接作用在list里的原vector上,没有任何数据拷贝开销。

指针方式

list<vector<T>> alist;
list<vector<T>>::iterator iter = alist.begin();

// 取原vector的指针,同样无拷贝
vector<T>* vec_ptr = &*iter;

通过指针vec_ptr访问原vector,效果和引用一致,只是语法上需要用->代替.。

2. 转移vector的所有权(移动语义)

如果不再需要list里的这个vector,可以用C++11引入的移动语义,把原vector的内存资源直接转移给新的vector,全程没有数据拷贝:

#include <utility> // 需要包含这个头文件使用std::move

list<vector<T>> alist;
list<vector<T>>::iterator iter = alist.begin();

// 移动原vector的资源到新vec,原vector会变为空状态
vector<T> vec = std::move(*iter);

这种方式适合你要把list里的vector“拿走”的场景,效率远高于拷贝,因为只是转移了内存指针等元数据,没有复制实际存储的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:30:52