将数组的部分复制到 C++ 中的 std::vector 中

Copy section of an array into a std::vector in C++

本文关键字:std 中的 vector C++ 数组 复制      更新时间:2023-10-16

你好,我想知道是否可以在初始化向量时复制数组的一部分。

例如,我试过

UINT16 myarray[] = { 0,1,2,3,4,5,6, ..., n };
std::vector<UINT16> myvect(myarray[3], myarray[3] + 16);

这种工作,但是我似乎得到的数据比我预期的要多。 这是正确的用法吗?

方法是传递迭代器,而不是值

std::vector<UINT16> myvect(myarray + 3, myarray + 3 + 16);
UINT16 myarray[] = { 0,1,2,3,4,5,6, ..., n };
std::vector<UINT16> myvect(myarray[3], myarray[3] + 16);

这使用3 myarray[3]19 myarray[3] + 16作为myvect构造函数的参数。 这反过来又将myvect设置为包含3元素,所有元素的值均为 19 .

如果你想要从索引 3 开始的 16 个元素的副本,你可以这样做:

std::vector<UINT16> myvect(&myarray[3], &myarray[3 + 16]);

这是一种不同的(更详细)方式:

uint16_t       myarray[]  = { 0, 1, 2, 3, 4, 5, 6, ..., n };
constexpr auto arr_size   = sizeof(myarray) / sizeof(myarray[0]);
constexpr auto copy_start = std::min< size_t >(3, arr_size);
constexpr auto copy_count = 19;
constexpr auto copy_end   = std::min< size_t >(copy_start + copy_count, arr_size);
vector< uint16_t > myvect(std::next(myarray, copy_start), std::next(myarray, copy_end));

从 C++11 开始,您可以使用uint16_t类型代替UINT16: 固定宽度整数(如果您的编译器支持它)

如果您的值在编译时可用,则可以使用编译时常量( constexpr ) 来计算帮助程序变量。否则应使用const

标准算法也可以用于数组,因此提供 std::next 的偏移量可用于获取数组的第 n 个元素。