【发布时间】:2019-12-07 09:14:59
【问题描述】:
我有一个函数需要将一个向量分成 n 个子向量。 例如,它可能看起来像这样:
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 在循环的第一次(也是唯一一次)迭代中被分配一个空向量。
我担心std::vector<uint8_t>(iter, iter + size)。 c++ 标准是否允许在 first == last 时使用其范围构造函数构造向量?
根据cplusplus.com,“使用的范围是[first,last),其中包括first和last之间的所有元素,包括first指向的元素但不包括last指向的元素”,但该语句没有'当 first == last 时没有任何意义?
我尝试在在线 IDE 上运行它,它似乎可以工作 (https://ideone.com/V9hylA),所以它显然没有被禁止,但它是未定义的行为吗?
【问题讨论】: