无法将元素插入到列表的向量中

时间:2018-01-22 10:08:45

标签: c++ list vector

我有一个列表矢量。每个向量元素(在这种情况下是列表)存储在与向量的索引相同的位位置处具有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;
    }
}

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]);