我有一个功能,需要将一个 vector 划分为n个子 vector 。
例如,它可能看起来像这样:
void foo(std::vector<uint8_t> vec, int numSubVectors){
size_t size = vec.size() / numSubVectors;
auto iter = vec.begin();
for (int i = 0; i < numSubVectors; ++i) {
auto sub_vec = std::vector<uint8_t>(iter, iter + size);
// do something with sub_vec
// ...
iter += size;
}
}
当使用
foo({}, 1)
调用时,我需要它来工作,其中sub_vec在循环的第一个(也是唯一的)迭代中被分配了一个空 vector 。我担心
std::vector<uint8_t>(iter, iter + size)
。当第一个== last时,c++标准是否允许使用其范围构造函数构造 vector ?根据cplusplus.com的说法,“使用的范围是[first,last),其中包括first和last之间的所有元素,包括first所指向的元素,而不是last所指向的元素”,但是当首先==最后?
我尝试在在线IDE上运行它,但它似乎可以正常工作(https://ideone.com/V9hylA),因此显然不禁止使用它,但是它的行为不确定吗?
最佳答案
从标准的iterator.requirements.general中:
因此,当first == last时,标准将其明确定义为空范围。
关于c++ - C++ std::vector迭代器构造函数,第一个== last,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57263861/