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

时间:2019-01-08 20:09:05

标签: c++ arrays vector copy

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

例如我尝试过

{{1}}

但是,这种作品似乎比我想要的要多。这是正确的用法吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

这使用myarray[3]3的{​​{1}}作为myarray[3] + 16构造函数的参数。依次将19设置为包含myvect个元素,所有元素的值为myvect

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

3

答案 2 :(得分:0)

这是另一种方式(更详细):

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类型的uint16_t类型:Fixed width integers(如果您的编译器支持的话)

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

标准算法也可以在数组上使用,因此可以使用对std::next的偏移量来获取数组的第n个元素。