我有一个列表矢量。每个向量元素(在这种情况下是列表)存储在与向量的索引相同的位位置处具有1(以二进制表示)的数字。即向量的第5个,第0个和第2个元素(列表)将包含5.但是程序在尝试将值插入列表的向量时终止。即使在调用reserve()和resize()之后,Vector的容量仍为0。怎么做到这一点?请帮忙!以下是相关代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
using namespace std;
void preprocess(int);
int test_case,x,y,monsters,queries;
int* health;
int to_change;
vector<list<int> > bits;
int main()
{
cin>>test_case;
while(test_case--)
{
cin>>monsters;
health = new int[monsters];
bits.resize(32);
bits.reserve(32);
for(int i=0;i<monsters;i++)
{
cin>>health[i];
preprocess(health[i]);
}
}
}
void preprocess(int val)
{
int a,this_bit,copy_of_health;
cout<<"currently:"<<val<<endl;
a=val,this_bit = 0,copy_of_health = a;
while(a)
{
if(a&1==1)
{
cout<<"Working on val"<<endl;
bits[this_bit].push_back(copy_of_health); //fails to execute this line
cout<<"done upto this"<<endl;
cout<<"This list size:"<<bits[this_bit].size()<<endl;
cout<<"pushed"<<copy_of_health<<"successfully"<<"in bit position"<<this_bit<<endl;
}
this_bit++;
a >>= 1;
}
}
答案 0 :(得分:0)
错误:矢量下标超出范围!
因为默认情况下无法初始化the vector<list<int>> bits
;
list<int> l1,l2;//...
vector<list<int>> bits{l1,l2};//...
确保您的矢量有足够的列表。 ^ - ^
我建议使用unique_ptr或shared_ptr(需要一个自定义的析构函数)来管理你的资源:
unique_ptr<int[]> health(new int[monsters]);