Член структуры, созданный дважды в пользовательском конструкторе?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Член структуры, созданный дважды в пользовательском конструкторе?

Сообщение Anonymous »

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

struct PhiBlock
{
int64_t bsize;              // block size
vector ind;        // 0/1 to track [pmin(y) > pb]
fenwick_tree phi_sum;       // partial sums

PhiBlock (int64_t bsize, int64_t a):
phi_sum(ind)
{
this->bsize = bsize;
ind.resize(bsize, 1);
phi_sum = fenwick_tree(ind);
}
// ...
Моя структура данных

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

struct fenwick_tree
{
size_t len; // 0-based len
std::vector t; // 1-based tree, indexes [1:len]

fenwick_tree(std::vector const &a)
{
len = a.size();
t.assign(len + 1, 0);
for (size_t i = 0; i < len; ++i)
add_to(i, a[i]);
}

// ...
};

Если я не включаю список инициализации членов для PhiBlock, GCC жалуется на отсутствие соответствующего вызова функции 'fenwick_tree::fenwick_tree()'. Итак, вот что, по моему мнению, происходит:
  • Код: Выделить всё

    fenwick_tree
    не имеет конструктора по умолчанию, поэтому мне приходится использовать инициализацию элемента phi_sum(ind), где ind по умолчанию создается как вектор, который должен быть пустым
  • Код: Выделить всё

    indРазмер 
    изменяется
  • Новое дерево Фенвика создается с использованием ind, затем устанавливается значение phi_sum, однако реализуется =
Это правильно и нужно ли создавать phi_sum дважды? Если бы я смоделировал свое fenwick_tree на основе контейнеров стандартной библиотеки, то у него должен быть конструктор по умолчанию, который ничего не делает - тогда мне не понадобится список инициализации членов?

Подробнее здесь: https://stackoverflow.com/questions/793 ... onstructor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»