清除std::list
和std::set
的最佳,最快和最可靠的方式是什么?
// 1st
list.clear();
set.clear();
// 2nd
list = {};
set = {};
// 3rd
list.swap(std::list<some_type>{});
set.swap(std::set<some_type>{});
答案 0 :(得分:5)
所有这些选项大致具有相同的性能(clear
版本需要比其他两个版本少一些操作,尽管性能损失可能是不可量化的),但版本(1){ {1}}是最明确的(就代码可读性而言),所以我会选择它。
值得注意的是container.clear
是一个编译错误,因为list.swap(std::list<some_type>{});
没有rvalue引用的重载,只接受非const左值引用。同上std::list::swap
。您必须创建一个命名的临时对象并与之交换。
答案 1 :(得分:2)
这三者同样“可靠”。
.clear()
的版本显然是最清晰的。 :)
但是,严肃地说,使用为任务命名的功能,以及为该任务专门添加的功能。这里不需要神秘的“诡计”。编写自我记录代码。