为什么我们可以push_back仅用range定义的子向量?

问题描述

我有一个vector<int> a = {1,2,3,4,5,6}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 constructor,它接受​​一对迭代器并将这些迭代器之间的值复制到新向量中。