2014-01-22 2 views
13

Как скопировать или перенести первые n элементы std::vector<T> в C++ 11 std::array<T, n>?Копирование std :: vector в std :: array

+12

['std :: copy_n'] (http://en.cppreference.com/w/cpp/algorithm/copy_n). –

+0

Вы хотите скопировать или переместить? Это разные вещи. – juanchopanza

+0

В зависимости от того, что ':: std :: vector' содержит,' :: std :: memcpy' и ':: std :: memmove' также могут быть использованы. – user1095108

ответ

22

Использование std::copy_n

std::array<T, N> arr; 
std::copy_n(vec.begin(), N, arr.begin()); 

Edit: я не заметил, что бы вы спросили о перемещении элементов, а также. Для перемещения оберните исходный итератор в std::move_iterator.

std::copy_n(std::make_move_iterator(v.begin()), N, arr.begin()); 
+0

Здесь N is const? array N должен быть const. –

+0

@notbad Да, 'N' is const (думаю, я должен был использовать' n', как опубликовано в вопросе) – Praetorian

+3

Существует также 'std :: move'. К сожалению, не 'std :: move_n'. –

4

Вы можете использовать std::copy:

int n = 2; 
std::vector<int> x {1, 2, 3}; 
std::array<int, 2> y; 
std::copy(x.begin(), x.begin() + n, y.begin()); 

И here «s живой пример.

Если вы хотите переместить, вместо этого, вы можете использовать std::move:

int n = 2; 
std::vector<int> x {1, 2, 3}; 
std::array<int, 2> y; 
std::move(x.begin(), x.begin() + n, y.begin()); 

И here «s другой живой пример.

+0

Как насчет 'n'? Не должно быть 'std :: copy (x.begin(), x.begin() + n, y.begin());'? – legends2k

+0

Вместо использования переменной, такой как 'n', было бы лучше использовать' x.size() '? –

Смежные вопросы