嵌套循环用C ++填充int向量的向量

时间:2017-07-08 05:48:27

标签: c++ c++11 vector initialization

我想生成std::vector std::vector int k,以便按以下方式表示q个向量,每个向量包含k=3个整数:

向量0:{0,1}

向量1:{2,3}

Vector 2:{4,5}

所以没有。对于这种情况q=2typedef int BlockId; typedef vector< BlockId > ParallelClassIds; ,但它们可以是任何整数&gt; = 1.由于此代码属于更大的项目,我使用了很多声明,其中包括以下内容:

k

让我们说每个集合代表&#34;并行类&#34; 的概念,每个整数代表其元素的ID,我称之为&#34 ;块&#34; 。我已经实现了以下尝试创建上述结构的函数(qvector< 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; } 是我声明的C ++类中可见的私有变量。

printf()

但是这个功能存在很多问题。首先,q==2有时打印2,有时是3,我希望它始终打印 CustomStringRequest stringRequest = new CustomStringRequest(Request.Method.POST, SIGN_IN_URL, new Response.Listener<CustomStringRequest.ResponseM>() { @Override public void onResponse(CustomStringRequest.ResponseM result) { CookieManager cookieManage = new CookieManager(); CookieHandler.setDefault(cookieManage); progressDialog.hide(); try { //From here you will get headers String sessionId = result.headers.get("Set-Cookie"); String responseString = result.response; Log.e("session", sessionId); Log.e("responseString", responseString); JSONObject object = new JSONObject(responseString); 。另外,代替上面的结构(我通过打印返回的结构来检查它),它似乎创建了这样的东西:

向量0:{0,0,0,1}

向量1:{0,0,2,3}

向量2:{0,0,4,5}

我真的不知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

vector< ParallelClassIds > ret(k, vector< BlockId >(q));

结合这一行:

ret.at(i).push_back(i*q+j);

您正在创建长度为q的k个向量,然后将其附加到末尾,使它们长度为2 * q。

您想要做的是:

vector< ParallelClassIds > ret(k);
for (int i = 0; i < k; i++){ 
  ret[i].reserve(q);
  ...

答案 1 :(得分:0)

您只能通过替换此行来获得预期结果:

ret.at(i).push_back(i*q+j);

用这个:

ret[i][j] = i*q+j;