c++ - 可以将一个空插入另一个集合吗?

标签 c++

对于天真的问题,我们深表歉意,使用范围函数将一个空集插入到另一个集是否可以,或者这是一种不可逾越的行为?

试运行 https://ideone.com/RNGIFT看起来不错,检查 reference如果容器为空,返回的迭代器将等于 end()。

#include <iostream>
#include <set>
using namespace std;


int main() {
    std::set<string> to_be_inserted;
    std::set<string> res;
    cout << "check everything is fine" << endl;
    res.insert(to_be_inserted.begin(), to_be_inserted.end());
    cout << "how about now ?" << endl;
    return 0;
}

最佳答案

是的,C++ 中大多数与迭代器相关的东西在空容器等边缘情况下都会以这种方式工作,因此依赖于容器上的 beginend 成员函数的算法在这种情况下不需要特殊代码。

由于 begin 将在集合为空的情况下返回结束迭代器,如您所示,它将有效地构成 [end, end) 的范围,这长度为 0(可以通过 std::distance 等函数检查)因此不执行插入操作(同时也是定义的行为)。

这可以在标准库实现中实际看到,例如 libc++ here其中 insert 的特定重载使用 for 循环遍历范围,该循环具有两个迭代器(第一个和最后一个)相等的退出条件,同时插入元素。如果将第一个和最后一个相等的空范围传递给它,它甚至不会进入循环。

关于c++ - 可以将一个空插入另一个集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453358/

相关文章:

c++ - 为什么我不能在声明结构时初始化结构中的 vector 成员?

c++ - OpenMP 崩溃给出了错误的结果

c++ - 有没有办法通过 'int' 而不是 'greater/lesser than' 来定义 '=' ?

c++ - Visual C++,断点不打断

c++ - 火箭的速度和高度建模 C++

c++ - 新的数组分配

c++ - 写入文件时核心转储?

c++ - 多行注释和换行

c++ - 流输入如何在 C++ 中与 cin 一起工作?

C++数组所有可能的组合