将数组的部分复制到 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);
这使用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 个元素。
相关文章:
- std:中的错误:生成normal_distribution时随机
- C++ ,错误:命名空间'std'中的'shared_ptr'未命名模板类型
- C++编译错误,std 中的互斥锁不会在 MinGW (GCC 6.3.0) 中命名类型
- 命名空间'std'中的'vector'没有模板类型
- 更改std中的向量::在同一向量上变换
- 在C++收到此错误,"std:cin.std 中的'运算符>>不匹配"
- android-ndk-r6-crystax-2 错误:命名空间'std'中的'string'未命名类型
- 命名空间“std”中的“ostream”不命名类型
- std中的mt19337没有命名类型
- 命名空间 std 中的字符串不命名类型
- 如何处理windows.h中的max宏与std中的max冲突
- 为什么我会收到错误:"与 std 中的操作员>>不匹配"?
- 错误:命名空间'std'中的'mutex'未命名 GCC 4.6.2 中的类型
- error:命名空间“std”中的“字符串”未命名类型 std::String isAble(long D, int T
- 命名空间'std'中的'vector'不命名类型
- 在c++中使用C头文件时,应该使用std::中的函数还是全局命名空间中的函数?
- 命名空间'std'中的'domain_error'不命名类型
- NDK 构建错误:命名空间'std'中的'string'未命名类型
- 命名空间“std”中的“函数”不命名类型
- 命名空间"std"中的"数组"未命名模板类型