[英]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]
其值为3
和myarray[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.