初始化具有预留容量的嵌套向量的子向量
Initializing sub-vectors of nested vectors with reserved capacity
我想创建向量的向量,以便每个子向量具有预定义的容量,但未初始化。
这是不执行我想执行的操作的代码:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> tVec;
tVec.reserve( 5 );
cout<<"tVec Size: "<<tVec.size()<<", capacity: "<<tVec.capacity()<<endl;
vector< vector<int> > tmpVecVec( 2, tVec );
cout<<"tmpVecVec[0] Size: "<<tmpVecVec[0].size()<<", capacity: "<<tmpVecVec[0].capacity()<<endl;
cout<<"tmpVecVec[1] Size: "<<tmpVecVec[1].size()<<", capacity: "<<tmpVecVec[0].capacity()<<endl;
}
以上输出为:
tVec Size: 0, capacity: 5
tmpVecVec[0] Size: 0, capacity: 0
tmpVecVec[1] Size: 0, capacity: 0
我想知道如何获得以下结果
tVec Size: 0, capacity: 5
tmpVecVec[0] Size: 0, capacity: 5
tmpVecVec[1] Size: 0, capacity: 5
当然,如果我用调整大小替换保留或在 tVec 的构造函数中提供大小 5,我可以做到这一点。但是,我可以在不使用这些方法的情况下执行此操作吗?
链接到工作代码:http://ideone.com/PBXeP
如果您希望使用
vector
s 来描述的行为,您应该使用这种行为(它可能无法满足您以后提出的所有要求。
int size = 5, capacity = 5;
vector<vector<int>> tmpVecVec(size);
for (auto& vec: tmpVecVec)
vec.reserve(capacity);
嗯,这是由库的实现定义的,所以它不是很好,但它可能适用于小元素计数:
vector<int>tVec(5, 0);
cout << "tVec Size: " << tVec.size() << ", capacity: " << tVec.capacity() << endl;
vector<vector<int> >tmpVecVec(2, tVec);
tmpVecVec[0].clear();
tmpVecVec[1].clear();
cout << "tmpVecVec[0] Size: " << tmpVecVec[0].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
cout << "tmpVecVec[1] Size: " << tmpVecVec[1].size() << ", capacity: " << tmpVecVec[0].capacity() << endl;
哪个输出:
tmpVecVec[0] Size: 0, capacity: 5
tmpVecVec[1] Size: 0, capacity: 5
在我的系统上使用 GNU 的 libstdc++ 和 LLVM 的 libc++。
但我认为 reserve() 是更好的方法。
#include "stdafx.h"
#include<vector>
using namespace std;
int main ()
{
vector<vector<int>>baz(5);
baz.reserve(5);
baz[0].reserve(10);
baz[0].reserve(20);
printf(" %i ",baz.capacity());
printf(" %i ",baz[0].capacity());
printf(" %i ",baz[1].capacity());
getchar();
return 0;
}
输出为 5、10 和 20
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 选择和修改嵌套向量中的条目的最佳实践
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 在C++中生成任意嵌套的向量
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 嵌套向量的缺点是什么?
- 如何通过迭代器访问向量中的嵌套对?
- 嵌套列表(字符串向量的向量)初始化失败
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- 删除嵌套向量中具有remove_if的元素
- 在循环访问嵌套向量时删除元素
- 使用嵌套循环搜索两个向量并查看其属性
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- C++:清除嵌套向量会导致奇怪的结果
- 如何在嵌套列表初始化中从map<><>中辨别向量?
- 类字符串和嵌套向量C
- 如何在C 中打印出嵌套向量的内容
- 如何在C++中生成任意嵌套的向量
- 使用嵌套向量动态分配方阵
- 在嵌套向量C 中获取特定元素