c++ - 如何将 std::array 元素附加或插入到 std::vector 中?
问题描述
我对 c++ 比较陌生,我尝试做一些研究,但是在网上搜索时,我主要遇到的是 C 数组,而不是std::array
. 将 std::array 元素附加到 std::vector 并将std::array
元素插入到 中的最有效方法是std::vector
什么?我应该使用 STL 函数std::copy
吗?我目前正在使用 C++17,MinGW64。
解决方案
要将现有数组(或一般的其他范围)的元素附加到向量,您可以将向量的插入重载用于迭代器范围:
vector<int> vec{1, 2, 3};
array<int, 3> arr{4, 5, 6};
// arr could be some other container or bare array as well, for ex.:
// int arr[] = {4, 5, 6};
// vector<int> arr {4, 5, 6};
// list<int> arr {4, 5, 6};
// ...
vec.insert(vec.end(), begin(arr), end(arr)); // insert at vec.end() = append
//or vec.insert(vec.end(), arr.begin(), arr.end()); // insert at vec.end() = append
请注意,如果您有其他类型而不是int
复制成本高昂,并且您想从源数组中移动元素,则可以使用
move_iterator
, 例如。
vec.insert(vec.end(), move_iterator(arr.begin()), move_iterator(arr.end()));
对于一般范围内的操作,容器成员函数是首选<algorithm>
,而不是标题中的同名函数。
因此,例如在这种情况下,vec.insert
将立即插入范围,而不是使用std::insert
where 元素将被一一插入。
Scott Meyers Effective STL很好地解释了这一点。
推荐阅读
- java - Spring Data JPA 在通过 ManyToOne 急切获取时不设置字段
- javascript - Ionic4+VueJS 汉堡菜单
- javascript - 如何在 Reactjs 中将类名和变量放在三元中?
- ruby-on-rails - 无法使用自定义设计策略
- excel - 从 VBA Excel 脚本访问 IE 弹出窗口窗体
- android - 为什么facebook登录引发错误执行查询
- vba - 添加 Union 以提高 VBA 代码的效率
- firebase - 无法从 firebase 部署 Cloud Functions
- python - 编写鲁棒(大小不变)的圆检测(分水岭)
- javascript - 如何在我的轮播中水平显示两个 div?