Правильный способ инициализации вектора уникальных указателей в C ++ 14 - PullRequest
0 голосов
/ 04 июля 2018

Для инициализации вектора уникальных указателей в C ++ 14 я могу рассмотреть следующие два способа. Какой метод лучше?

#include<memory>
#include<vector>
using namespace std;

int main(){

  const int N = 10000000;

  {//first method
    vector<unique_ptr<int>> vec(N);
    for(auto it=vec.begin(); it!=vec.end();++it){
      auto ptr = make_unique<int>();
      *it = std::move(ptr);
    }
  }

  {//second method
    vector<unique_ptr<int>> vec;
    for(int i=0; i<N; i++){
      vec.push_back(make_unique<int>());
    }
  }
}

1 Ответ

0 голосов
/ 04 июля 2018

В любом случае работает. Второй способ немного эффективнее , если вы резервируете правильную емкость в первую очередь. Лично я считаю стандартные алгоритмы более выразительными. Я бы сделал это так:

std::vector<std::unique_ptr<int>> vec;
vec.reserve(N);
std::generate_n(std::back_inserter(vec), N, [] { return std::make_unique<int>(); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...