c++ - 为什么我们可以 push_back 只用范围定义的子向量?
问题描述
说我有一个vector<int> a = {1,2,3,4,5,6}
and vector<vector<int>>b
。为什么我们可以写
b.push_back({a.begin() + 1, a.begin() + 4});
最后得到b = {{2345}}
? 我从部分代码中简化了这一点,所以如果这组特定的代码不起作用,我将粘贴实际代码。我认为简化将有助于理解其背后的想法。
解决方案
b.push_back({a.begin() + 1, a.begin() + 4});
相当于:
std::vector<int> c{a.begin() + 1, a.begin() + 4};
b.push_back(c);
这只是调用std::vector
构造函数,它接受一对迭代器并将这些迭代器之间的值复制到新向量中。
推荐阅读
- javascript - 上下文更改后,您可以使 ref 不更改吗?反应
- c - 反转 32 位整数数组的元素顺序
- reactjs - 如何解决 Reactjs 中的“找不到模块”?
- sql - 在 SQL 中混合 Like 和 Not Like
- java - 从 Android Java 进程中获取或创建上下文
- java - 在二叉搜索树中按顺序检索元素
- javascript - 作为 Array.prototype.every() 方法的结果,我如何返回一个布尔数组?
- r - 如何使用索引的输出来对我的数据框进行子集化?
- java - 按钮侦听器内的代码未执行
- google-search - 为什么当我输入更多字母时,我的第一个自动完成选项会消失?