Определите размер массива в инициализаторе конструктора

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

Так что, если ваши документы с тегами во время обучения имели строковый тег 'myDocTag', вы должны использовать model.docvecs['myDocTag'].

Если вы явно указали простые теги int, вы можете использовать model.docvecs[12]. (Но обратите внимание, что в таком случае вы должны быть осторожны при назначении смежных целых, начиная с 0.)

14
задан sbi 8 November 2010 в 19:02
поделиться

7 ответов

Вы не можете инициализировать размер массива с неконстантным измерением, которое не может быть вычислено при компиляции время (по крайней мере, в текущем стандарте C ++, AFAIK).

Я рекомендую использовать std :: vector вместо массива. Он предоставляет синтаксис, похожий на массив, для большинства операций.

21
ответ дан 1 December 2019 в 05:48
поделиться

Use the new operator:

class Class
{
   int* array;
   Class(int x) : array(new int[x]) {};
};
12
ответ дан 1 December 2019 в 05:48
поделиться

Не думаю, что это можно сделать. По крайней мере, не так, как вы хотите. Вы не можете создать массив статического размера (array []), когда размер основан на динамической информации (x).

Вам нужно будет либо сохранить указатель на int и размер, и перегрузить копию конструктор, оператор присваивания и деструктор для его обработки или используйте std :: vector.

class Class
{
  ::std::vector<int> array;
  Class(int x) : array(x) { }
};
4
ответ дан 1 December 2019 в 05:48
поделиться

Почему бы вместо необработанного массива не использовать вектор.

class SomeType {
  vector<int> v;
  SomeType(size_t x): v(x) {}
};

Использование вектора даст вам автоматическую защиту от утечек в случае исключения и многие другие преимущества по сравнению с необработанным массивом.

1
ответ дан 1 December 2019 в 05:48
поделиться

You can't do it in C++ - use a std::vector instead:

#include <vector>

struct A {
   std::vector <int> vec; 
   A( int size ) : vec( size ) {
   }
};
0
ответ дан 1 December 2019 в 05:48
поделиться

Declare your array as a pointer. You can initialize it in the initializer list later through through new.

Better to use vector for unknown size.

You might want to look at this question as well on variable length arrays.

0
ответ дан 1 December 2019 в 05:48
поделиться

Два варианта:

Использовать станд :: вектор. Это позволяет легко изменить размер массива.
Используйте std :: tr1 :: array. Это имеет статический размер.

Оба могут быть правильно инициализированы в списке инициализаторов конструкторов.

0
ответ дан 1 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: