c std :: vector迭代器构造函数,first == last
c++ std::vector iterator constructor with first == last
i具有一个函数,需要将矢量划分为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 标准是否允许使用其范围构造器构建向量时,当
根据cplusplus.com,"使用的范围是[第一个,最后(,其中包括第一个和最后一个之间的所有元素,包括第一个元素,而不是最后指向的元素,但不是最后指向的元素",但是该语句却不是't在第一个==最后一个?
时有意义我尝试在在线IDE上运行它,并且似乎可以使用(https://ideone.com/v9hyla(,所以显然不是禁止的,但是它是未定义的行为吗?
来自迭代器。
迭代器和表示范围的哨兵是可比的。如果i == s,范围[i,s(是空的。否则[...]
因此,当第一个==最后,标准明确将其定义为空范围。
迭代器对[first, last)
其中first == last
是我们定义空范围的方式。它在句法和逻辑上都是有效的。从迭代器对构造std::vector
将做正确的事情并创建一个空容器。
相关文章:
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- std::adjacent_find(last, last) 是未定义的吗?
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- 为什么Eigen不能解析内置符号?(all、last、seq等)
- 为什么 std::d istance() 对于 std:list:<int>:itrator 在 last 在 first 之前时不返回负数?
- c std :: vector迭代器构造函数,first == last
- QSqlQuery last 不起作用
- 如何声明pair<int,int>::first
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- "Node<T*> *first"和"Node<T> *first"有什么区别?
- 如何从unordered_set获取"last"元素?
- 为什么 std::find_if(first, last, p) 不通过引用获取谓词?
- 我怎样才能保持'first'和'second'用结构替换 std::p air?
- 为什么"begin/end"与"first/last"的差异?
- 自定义迭代器中distance_type的目的 - std::d istance(first, last) 将返回错误的
- 创建一个算法,要求用户输入两个正数,将它们称为 "first" 和 "last" ,并打印第一个正数之间的所有数字的总和
- container.erase(first,last),其中first == last在STL容器中
- 如何使用一对迭代器[first, last]在模板中创建容器