Элегантный способ вернуть обратно std :: array в std :: vector N раз - PullRequest
0 голосов
/ 19 сентября 2018

следующие коды возвращают std :: array в std :: vector N раз.Есть ли более элегантный и короткий способ сделать это?

#include <iostream>
#include <vector>
#include <array>

#include <iomanip>
#include <complex>
#include <cmath>

int main () {
  int N=10;
  std::vector< std::array<std::complex<double>,3> > v;
  v.reserve(N);
  for(int i=0;i<N;i++){
    std::array<std::complex<double>,3> el { {0.0,3.0,0.0} };
    v.push_back(el);
  }
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Да, но вы должны использовать круглые скобки при построении вектора

std::vector< std::array<std::complex<double>,3> > v(n, {0.0,3.0,0.0});

Если используются фигурные скобки, предпочтительнее использовать список инициализации, и в этом случае могут возникнуть непредвиденные ошибки.

0 голосов
/ 19 сентября 2018

Вы можете использовать функцию-член std::vector::insert (# 3 в наборе перегрузок):

int N=10;
std::vector< std::array<std::complex<double>,3> > v;
v.reserve(N);

v.insert(v.end(), N,  { {0.0,3.0,0.0} });

Обратите внимание, что ответ @ MarekR предпочтительнее для инициализации вектора, так как онобходит вызов reserve, и настройка объекта во время инициализации обычно лучше, чем последующие вызовы функций-членов.Вышеуказанный вызов std::vector::insert вместо этого подходит для добавления дополнительных элементов позже.

...