создавая вектор указателей, которые указывают на большее количество векторов - PullRequest
2 голосов
/ 16 июля 2009

Я пытаюсь создать вектор, который содержит указатели, каждый указатель указывает на другой вектор типа 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;
};

Не могу понять, как push_back на этот вектор назначения с 2 значениями?

Я думал ...

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

Как я и думал, это разыменовывает указатель на binpocket[1], раскрывающий значения массива назначения, а затем обращается к каждому элементу по очереди. Но он не компилируется.

может кто-нибудь помочь ... но он имеет только одно значение и не компилируется в любом случае.

Ответы [ 2 ]

8 голосов
/ 16 июля 2009
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 является нестандартным (пока), но является общепринятым расширением.

3 голосов
/ 16 июля 2009

Дайте вашей клетке конструктор:

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

Кстати, обратите внимание, что long long не является стандартным C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...