在C++中,set和vector是两种非常常用的标准模板库(STL)容器,它们各自有不同的特性和使用场景。
set的常用方法和注意事项:
#include <set>:使用set前需要包含相应的头文件。set<T> s;:声明一个空的set,其中T是存储元素的类型。set<T> s(c.begin(), c.end());:通过迭代器范围构造set,其中c是一个包含初始元素的容器。s.insert(t);:向set中插入一个元素t。s.erase(t);:从set中删除一个元素t。s.find(t);:查找set中是否存在元素t,如果存在返回该元素的迭代器,否则返回s.end()。s.size();:返回set中元素的个数。s.empty();:检查set是否为空。s.begin();:返回指向set中第一个元素的迭代器。s.end();:返回指向set末尾的迭代器。- 注意事项:
set中的元素会自动排序且唯一,不允许有重复元素。
vector的常用方法和注意事项:
#include <vector>:使用vector前需要包含相应的头文件。vector<T> v;:声明一个空的vector,其中T是存储元素的类型。vector<T> v(n, val);:声明一个大小为n,所有元素初始化为val的vector。v.push_back(t);:在vector的末尾添加一个元素t。v.pop_back();:删除vector的最后一个元素。v.size();:返回vector中元素的个数。v.capacity();:返回vector的容量,即在不需要重新分配内存的情况下可以容纳的元素数量。v.resize(n);:调整vector的大小到n,可以增加或减少元素。v.reserve(n);:预留n个元素的空间,但不实际添加元素。- 注意事项:
vector支持随机访问,可以通过下标直接访问元素,但需要注意不要越界。
在使用这两种容器时,需要根据具体需求选择合适的容器类型。例如,如果需要快速查找元素,可以使用set,因为其内部通常是基于平衡二叉搜索树实现的,查找效率较高。而如果需要动态添加或删除元素,并且需要随机访问这些元素,那么vector可能是更好的选择。此外,由于set自动去重并排序,它不适用于需要存储重复元素或不关心元素顺序的情况。而vector则没有这些限制。在实际编程中,还需要考虑内存使用和性能等因素,选择合适的容器以满足程序的需求。