我该如何将 std::vector<T>
的前 n
个元素复制或移动到一个 C++11 的 std::array<T, n>
中?
我该如何将 std::vector<T>
的前 n
个元素复制或移动到一个 C++11 的 std::array<T, n>
中?
std::array<T, N> arr;
std::copy_n(vec.begin(), N, arr.begin());
编辑:我没有注意到您也问了如何移动元素。 要移动,请将源迭代器包装在std::move_iterator
中。
std::copy_n(std::make_move_iterator(v.begin()), N, arr.begin());
N
是常量(猜测我应该使用问题中提到的 n
)。 - Praetorianstd::move
。遗憾的是,没有 std::move_n
。 - R. Martinho Fernandescopy_n
的元素数量需要是向量和数组大小的最小值。否则,您将读取超出源边界或写入超出目标边界,这两种行为都是未定义的。 - Praetoriann
怎么办?不应该是std::copy(x.begin(), x.begin() + n, y.begin());
吗? - legends2kn
,不如使用 x.size()
更好,你觉得呢? - Arnav Borborahx.size()
,但它不会编译 - 这里的 N 是一个编译时常量,甚至是一个模板参数。
std::array
就像一个数组 - 它需要在编译时知道大小。
就这样。 - foo
std::copy_n
是C++标准库中的一个算法,用于将一个指定数量的元素从一个容器复制到另一个容器。源和目标区间都由迭代器指定。 - Some programmer dude::std::vector
的内容,也可以使用::std::memcpy
和::std::memmove
。 - user1095108std::uninitialized_copy
:) - legends2k