push_back () в двумерном векторе, каков правильный синтаксис? - PullRequest
3 голосов
/ 12 сентября 2011

Я определил тип переменной следующим образом:

typedef unsigned int color[3];

Затем я создал вектор этого типа:

vector<color> RGB;

Теперь, скажем, я хочу отодвинуть новый элементк этому вектору.Какой правильный синтаксис?Мой g ++ не позволяет мне делать что-то вроде:

color temp = {255, 255, 255};
RGB.push_back(temp);

Что я считаю хорошим синтаксисом :( Любые предложения очень ценятся

Ответы [ 2 ]

9 голосов
/ 12 сентября 2011

Вы не можете использовать необработанные массивы в качестве типов для любых стандартных контейнеров.

Типы должны быть присваиваемыми (они имеют неявное или явное operator =) и конструируемыми (они имеют неявное или явное значение по умолчанию и конструкторы копирования).

Вы можете заключить ваш тип массива в struct, чтобы разрешить использование со стандартными контейнерами:

struct my_colour_array
{
    unsigned int colours[3];
};

В этом случае компилятор будет генерировать неявные операторы и конструкторы. Если вам нужно другое поведение, вы можете определить свое.

Для вашего использования может иметь смысл иметь инициализирующий конструктор:

struct my_colour_array
{
    unsigned int colours[3];

// initialising constructor
    my_colour_array (unsigned int r, unsigned int g, unsigned int b)
    {
        this->colours[0] = r;
        this->colours[1] = g;
        this->colours[2] = b;
    }
};

Тогда вы можете настроить свой вектор:

std::vector<my_colour_array> myvector;
// push data onto container via a temporary
myvector.push_back(my_colour_array(0,255,0));
// etc

Надеюсь, это поможет.

1 голос
/ 12 сентября 2011

Ваш тип цвета довольно прост, поэтому я бы использовал другой вектор для определения этого типа:

typedef vector<int> color;
vector<int> temp(3,0); // 3 ints with value 0
temp[0] = 255;
temp[1] = 255;
temp[2] = 255;

, а затем:

vector<color> RGB;
RGB.push_back(temp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...