用保留向量初始化向量的向量
Initialize vector of vectors with reserved vector
我有一个向量的向量:
std::vector<std::vector<T>> v;
我想用5个元素(T的5个向量)初始化这个向量,每个向量将包含0到10个元素。显然,我需要内部向量是保留的 10,而不是大小为 10。我不需要发生不必要的重新分配或复制。换句话说,我需要位置建设。
由于std::vector
没有提供需要保留的项目数量的构造函数,我想到了这个想法:
std::vector<std::vector<T>> v(5,
[](){
std::vector<T> temp;
temp.reserve(10);
return temp;
}());
问题:
- 是否有效?这是否包含未定义的行为?
- 我真的把我上面描述的所需资源最小化了吗?我觉得我的方法中有不必要的复制。
- 不是无效的,但它不做你想要的。据我所知,这里没有未定义行为。
- 如果优化器执行不好,可能会有一个不必要的副本。
v
元素的capacity()
,你会看到它们没有被设置为10
。这是因为vector
的复制构造函数没有被定义为逐字复制容器——它复制容器的元素。
要做你想做的,你需要调用reserve()
后,这些向量已经构造:
std::vector<std::vector<T>> v(5);
for(auto& vec : v) {
vec.reserve(10);
}
它的额外好处是代码更少,可读性更强。
相关文章:
- 为什么我在向量初始化时收到此错误?
- 使用向量初始化参数化构造函数的对象数组
- C++向量初始化遗传算法的代理向量
- shared_ptr类的向量的向量初始化问题
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 使用向量初始化C++中的链表
- C++ 中的向量初始化
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- std::另一个函数中的向量初始化
- 理解向量初始化时出现问题
- 静态常量 std::<char>没有堆的向量初始化?
- 向量初始化在 C++ 类中失败
- 具有从特定范围的随机数初始化特征矩阵或向量初始化特征矩阵或向量的有效方法
- 关于向量初始化的一些问题
- 了解C 中的向量初始化
- 设置::使用数字中的引号进行向量初始化
- VS2010中的向量初始化
- C++:构造函数中的向量初始化
- 如何从向量初始化数组?(如何将指针强制转换为数组?)
- 给我一个向量初始化的提示或(答案)