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)
@mlimber已经给出了一个解释.
我的解释有点不同.用简单的英语,这是一种非常简单的方法:
std::set<Cat> cats;
cats.insert(morris);
Run Code Online (Sandbox Code Playgroud)
并使其变慢(线性而不是对数)并且难以阅读或理解.
编辑:凭心而论,我想我应该补充一点,是你的几个原因可能想要做这样的事情.例如,如果您确实需要知道将Cats添加到集合中的顺序,那么保留原始顺序可能会有所帮助.同样,如果您通常以某种方式使用该集合,这种方式可以使它们在内存中连续存在,并且很少添加新项目,那么将数据存储在一个而vector不是一个中更有意义set.
一set,然而,是专门做究竟什么正在这里做,所以set是显而易见的选择(没有令人信服的理由来使用vector,只是不在你已经证明什么可见).