我有一个功能,需要将一个 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/

10-11 22:23
查看更多