C++. Вектор класса (Как инициализировать константу данных класса?)

Модератор: Модераторы разделов

vipermagi
Сообщения: 83
ОС: AgiliaLinux

C++. Вектор класса

Сообщение vipermagi »

Есть MyClass с единственным конструктором (по умолчанию), который инициализирует константу (любой инт или еденичка по умолчанию).

Нужно сделать вектор с этим классом, с не умолчальным значением конечно же.

Как?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Вектор класса

Сообщение NickLion »

Код: Выделить всё

#include <vector>
...
std::vector<MyClass> vector;

Если у MyClass конструктор по-умолчанию есть, то всё нормально будет. Насчёт инициализации константы — не понял, что имелось в виду.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Вектор класса

Сообщение vipermagi »

NickLion писал(а):
24.11.2013 15:08
Насчёт инициализации константы — не понял, что имелось в виду.


Мне нужно, чтобы значение константы было допустим 6 или 10, а в конструкторе по умолчанию 1 стоит. После создания вектора он заполнится объектами MyClass с внутри константами значения 1 и ни как это назад не поменять.
Но оно и специально так сделано, чтобы нельзя было потом у объекта это свойство поменять.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Вектор класса

Сообщение NickLion »

Т.е. у Вас, что такое:

Код: Выделить всё

class MyClass
{
public:
    MyClass(int z = 1) : x(z) {}
    const int x;
};

?

Тогда никак легальным способом. Можно сделать вектор указателей на объекты, тогда можно без проблем:

Код: Выделить всё

std::vector<std::unique_ptr<MyClass>> v;
v.push_back(std::unique_ptr<MyClass>(new MyClass(7)));


Или, как вариант, сделать поле неконстантным, закрытым (private). Перегрузить конструктор копирования/оператор присваивания и сделать метод для чтения значения данного поля.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Вектор класса

Сообщение vipermagi »

Да, у меня именно такое.

И печалька берёт от того, что нужно будет в трёхмерный массив пушбэками заталкивать :( Думал, всё же есть вариант, залез спросил.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Вектор класса

Сообщение NickLion »

Может Вы просто не так пытаетесь решить задачу? Расскажите подробнее, что Вам надо сдлеать.

UPD раз Вам не нравится push_back, может подойдёт что-то такое:

Код: Выделить всё

#include <iostream>
#include <vector>
#include <memory>

class MyClass
{
public:
    MyClass(int x = 1) : xp(x) {}

    int x() const { return xp; }
private:
    int xp;
};

int main()
{
    std::vector<MyClass> v {7, 9, 8};
    for (const auto& f : v) {
        std::cout << f.x() << std::endl;
    }
    return 0;
}
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Вектор класса

Сообщение vipermagi »

NickLion писал(а):
24.11.2013 15:43
Может Вы просто не так пытаетесь решить задачу? Расскажите подробнее, что Вам надо сдлеать.


Сильно сомневаюсь, что я пытаюсь не правильно. Это лаба по нейросетям. Собственно класс нейрона нужно засунуть в класс сети, в элемент данных двухмерного вектора. Естественным было желание сделать это в одну строчку при объявлении в конструкторе класса сети.
То есть константа из вопроса тут вобщем не при чём, она только делает понятным моё желание; ведь в итоге теперь кроме фор форыча с кучей new в конструкторе, мне нужно будет это ещё так же подмести в деструкторе.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Вектор класса

Сообщение NickLion »

Ну, я выше привёл пример с initializer_list, так не подходит?
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: C++. Вектор класса

Сообщение vipermagi »

gcc-4.5.2 это не понимает.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: C++. Вектор класса

Сообщение /dev/random »

vipermagi писал(а):
24.11.2013 16:19
gcc-4.5.2 это не понимает.

Это даже gcc-4.4.7 понимает, если добавить опцию "-std=c++0x". Вот следующую строчку - да, только начиная с 4.6 понимает. Но зачем пользоваться такими древними версиями? Сейчас даже в Debian Stable лежит 4.7.2.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++. Вектор класса

Сообщение NickLion »

Ну, или заменить for ( : ) на обычный с итератором.
Спасибо сказали: