C++标准模板库矢量问题

sol*_*sol 0 c++ vector standard-library

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

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);
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 5

@mlimber已经给出了一个解释.

我的解释有点不同.用简单的英语,这是一种非常简单的方法:

 std::set<Cat> cats;

 cats.insert(morris);
Run Code Online (Sandbox Code Playgroud)

并使其变慢(线性而不是对数)并且难以阅读或理解.

编辑:凭心而论,我想我应该补充一点,你的几个原因可能想要做这样的事情.例如,如果您确实需要知道将Cats添加到集合中的顺序,那么保留原始顺序可能会有所帮助.同样,如果您通常以某种方式使用该集合,这种方式可以使它们在内存中连续存在,并且很少添加新项目,那么将数据存储在一个而vector不是一个中更有意义set.

set,然而,是专门做究竟什么正在这里做,所以set是显而易见的选择(没有令人信服的理由来使用vector,只是不在你已经证明什么可见).