как инициализировать векторную структуру векторов? - PullRequest
0 голосов
/ 09 мая 2018

поэтому у меня есть такая структура:

struct lang_accuracy{ 
    std::vector<int> sum;
    vector<string> language;
};

и этот вектор типа структуры

vector<lang_accuracy> s;

...
for (int i = 0;...)
{
  s.push_back(lang_accuracy());
  for (int k = 0;...)
  {  
      s[i].sum.push_back(); // `<- error`
      s[i].sum[k]=`some integer value`;
  }
  s[i].language.push_back(); // `<- error`
  s[i].language[i] = `some string`;
}

Итак, поскольку в моей структуре 2 вектора, я должен сначала выделить больше памяти с помощью push_back в s, а затем перейти к элементу i вектора s и инициализировать. Но sum и language также являются векторами, и по какой-то причине я не могу скомпилировать вышесказанное, потому что я получаю следующее:

ошибка C2661: 'std::vector<int,std::allocator<_Ty>>::push_back': перегруженная функция не принимает 0 аргументов

Я знаю, в случае vector<vector<type>> вас push_back элементов в первом векторе, а когда он заполнен, вы push_back целого вектора переходите в другой. Здесь я не могу этого сделать, потому что sum и lang не распознаются как автономные вне структуры.

Как мне заполнить мой sum чем?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Было бы лучше использовать emplace_back значение поставки, таким образом, временные затраты не будут задействованы:

s.emplace_back();
for (int k = 0;...)
{  
    s[i].sum.emplace_back(42);
}
s[i].language.emplace_back("whatever");
0 голосов
/ 09 мая 2018

Функция vector<T>::push_back(T) предназначена главным образом не для выделения памяти, а для добавления элемента в конец вектора (и при необходимости выделяет больше памяти для этого элемента).

Вместо двухэтапного подхода вам нужен только один:

s[i].sum.push_back(`some integer value`);
0 голосов
/ 09 мая 2018

Ошибка вполне понятна. Вы ничего не предоставляете push_back для добавления к вектору.

Например, чтобы добавить что-то в sum, вы должны указать, что вы хотите добавить:

s[i].sum.push_back(42); // add 42 to `sum`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...