有人可以用英语解释这里发生了什么吗?
std::vector<Cat*> cats; //I get that cats is a vector of Cat objects
if (std::find(cats.begin(), cats.end(), morris) == cats.end()) {
cats.push_back(morris);
}
最佳答案
@mlimber已经给出了一种解释。
我会以不同的方式解释它。用简单的英语来说,这是一种非常简单的方法:
std::set<Cat> cats;
cats.insert(morris);
并使其变慢(线性而不是对数),并且难以阅读或理解。
编辑:公平地说,我想我应该补充一点,出于某些原因,您可能想做这样的事情。例如,如果您确实需要知道将
Cat
添加到集合中的顺序,则保留原始顺序可能很有意义。同样,如果您通常以使集合受益于它们在内存中连续并且很少添加新项目的方式使用集合,则将数据存储在vector
中比set
可能更有意义。但是,
set
被设计为完全执行此处的操作,因此set
是显而易见的选择(没有强制性的理由使用vector
只是在您所显示的内容中不可见)。关于c++ - C++标准模板库 vector 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5185330/