我想生成std::vector
std::vector
int
k
,以便按以下方式表示q
个向量,每个向量包含k=3
个整数:
向量0:{0,1}
向量1:{2,3}
Vector 2:{4,5}
所以没有。对于这种情况q=2
和typedef int BlockId;
typedef vector< BlockId > ParallelClassIds;
,但它们可以是任何整数&gt; = 1.由于此代码属于更大的项目,我使用了很多声明,其中包括以下内容:
k
让我们说每个集合代表&#34;并行类&#34; 的概念,每个整数代表其元素的ID,我称之为&#34 ;块&#34; 。我已经实现了以下尝试创建上述结构的函数(q
,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;
}
是我声明的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}
我真的不知道为什么会发生这种情况。
答案 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;