Назначение вектора из массива (указатель) - PullRequest
0 голосов
/ 01 марта 2012

Есть ли стандартный способ сделать это лучше, чем цикл for?

Если бы у меня был тип массива предположительно , я мог бы сделать это:

double d_array[] = { 1.0, 2.0, 3.0 };
std::vector<double> d_vector(d_array, d_array+3);

Но я не могу сделать это, когда у меня есть только double * и int, указывающие его длину.

Редактировать: На самом деле, я думаю, что я действительно могу это сделать. Тем не менее, сообщения об ошибках довольно редки, если вы неправильно указали параметры типа (поэтому сначала он не работал у меня).

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Конечно, вы можете сделать это так же

int length;
double *d;
//allocate memory and data to pointer
std::vector<double> d_vector(d, d+length);
1 голос
/ 01 марта 2012

Да. Вы должны быть в состоянии сделать это. Соответствующим конструктором является template <class InputIterator> vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() ); - и указатели также являются итераторами (поскольку вы можете выполнять целочисленную арифметику для них).

Тем не менее, все, что делает вектор, выполняет итерации по элементам d_array, поэтому не ожидайте, что производительность будет значительно лучше, чем у версии for loop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...