有人可以用英语解释这里发生了什么吗?

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/

10-11 16:28