您好,我想知道在初始化向量时是否可以复制数组的一部分。
例如我尝试过
{{1}}
但是,这种作品似乎比我想要的要多。这是正确的用法吗?
答案 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个元素。