Как преобразовать массивы в векторные указатели в C ++? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь преобразовать массив в векторный указатель. Я попытался использовать std :: copy, однако это привело к ошибке SegFault. Есть какой-либо способ сделать это? Большое вам спасибо, и я действительно ценю это.

#include <iostream>
#include <iterator>
#include <algorithm>

int main () {
  int myints[]={10,20,30,40,50,60,70};
  std::vector<int> *myvector (7);
  std::copy ( myints, myints+7, *myvector->begin() );
}

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Я не совсем убежден, что вы на самом деле хотите указатель на вектор, так как маловероятно, что это будет так (также std::vector<int> *myvector(7); не создает экземпляр вектора, он создает указатель на std::vector. Если Вы хотите создать экземпляр вектора, это работает:

std::vector<int> myVector(myInts, myInts + (sizeof(myInts)/sizeof(*myInts)));

В противном случае,

указатель:

auto myVector = new std::vector<int>(myInts, myInts + (sizeof(myInts)/sizeof(*myInts)));

умный указатель:

auto myVector = std::make_unique<std::vector<int>>(myInts, myInts + (sizeof(myInts)/sizeof(*myInts)));

0 голосов
/ 01 ноября 2018

Для этого преобразования в обычный вектор будет. Использование векторного указателя не очень хорошая идея, потому что это может вызвать нежелательное поведение. Также ваш векторный указатель никогда не создавался.

#include <iostream>
#include <iterator>
#include <algorithm>

int main () {
  int myints[]={10,20,30,40,50,60,70};
  std::vector<int> myvector (7);
  std::copy ( myints, myint+7, myvector.begin() );
}
0 голосов
/ 01 ноября 2018
#include <iostream>
#include <iterator>
#include <algorithm>
#include <memory>

int main () {
  int myints[]={10,20,30,40,50,60,70};
  auto myvector = std::make_unique<std::vector<int>>(7);
  std::copy ( myints, myints+7, myvector->begin() );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...