【发布时间】:2017-12-12 11:19:10
【问题描述】:
我想生成std::vector 的std::vector 的int 以表示k 向量,每个向量都包含q 整数,方式如下:
向量 0:{0,1}
向量 1:{2,3}
矢量 2:{4,5}
所以没有。对于这种情况k=3 和q=2,但它们可以是任何整数> = 1。由于这段代码属于一个更大的项目,我使用了很多声明,其中包括:
typedef int BlockId;
typedef vector< BlockId > ParallelClassIds;
假设每个集合代表一个“并行类”的概念,每个整数代表其元素的ID,我称之为“块”。我已经实现了以下试图创建上述结构的函数(k、q 是我声明的 C++ 类中可见的私有变量)
vector< ParallelClassIds > generateResolutionIds(){
//The variable to be returned
vector< ParallelClassIds > ret(k, vector< BlockId >(q));
for (int i = 0; i < k; i++){
for(int j = 0; j < q; j++){
printf("Current parallel class size %ld\n", ret.at(i).size());
ret.at(i).push_back(i*q+j);
}
}
return ret;
}
但是这个功能有很多问题。首先,printf() 有时会打印 2,有时会打印 3,而我希望它总是打印 q==2。此外,它似乎创建了这样的东西,而不是上面的结构(我通过打印返回的结构检查了这一点):
向量 0:{0,0,0,1}
向量 1:{0,0,2,3}
向量 2:{0,0,4,5}
我真的不知道为什么会发生这种行为。
【问题讨论】:
标签: c++ c++11 vector initialization