创建指向更多向量的指针向量

时间:2009-07-16 08:11:44

标签: c++ vector pointers

我正在尝试创建一个包含指针的向量,每个指针都指向另一个类型为Cell的向量,我使用了一个结构。 下面的for循环允许我让用户定义指针向量中有多少个元素。这是我的代码:

vector< vector<Cell>* >  vEstore(selection);
for (int t=0; t<selection; t++)
{
    vEstore[t] = new vector<Cell>; 
    vEstore[t]->reserve(1000);
}

我认为,这给了我一个指向Cell类型的目标向量的指针向量。 这个编译,但我现在正试图push_back到目标向量上,看不到怎么做。

由于目标向量的类型是Cell,它由以下类型构成:

struct Cell
{
    unsigned long long lr1;
    unsigned int cw2;
};

我无法弄清楚如何使用2个值push_back到这个目标向量上?

我在想......

binpocket[1]->lr1.push_back(10);
binpocket[1]->cw2.push_back(12);

我认为这会取消引用显示目标数组值的binpocket[1]处的指针,然后依次寻址每个元素。 但它没有编译。

任何人都可以提供帮助 ...但这只有一个值,无论如何都不会编译。

2 个答案:

答案 0 :(得分:8)

Cell cell = { 10, 12 };
binpocket[1]->push_back(cell);

或者,您可以为结构提供构造函数。

struct Cell
{
    Cell() {}
    Cell(unsigned long long lr1, unsigned int cw2)
        : lr1(lr1), cw2(cw2)
    {
    }

    unsigned long long lr1;
    unsigned int cw2;
};

然后你可以做

binpocket[1]->push_back(Cell(10, 12));

请注意,long long是非标准的(但是),但是是普遍接受的扩展名。

答案 1 :(得分:3)

为您的单元格提供构造函数:

struct Cell
{
    unsigned long long lr1;
    unsigned int cw2;

    Cell( long long lv, int iv ) : lr1(lv), cw2(iv ) {}
};

您现在可以说:

binpocket[1]->push_back( Cell( 10, 12 ) );
BTW,请注意long long不是标准的C ++。