繁体   English   中英

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

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

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

例如我试过

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); 

这将使用myarray[3]其值为3myarray[3] + 16其值为19作为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个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM