使用STL(Standard Template Library)是C++编程中的一个重要方面,它提供了一系列通用的容器、算法和迭代器,以简化常见的数据操作。以下是一些基本的使用方法和注意事项:
STL容器选择
vector:适用于需要连续内存且支持下标访问的场景。
list:适合频繁插入和删除操作。
deque:适用于需要高效插入和删除操作,同时支持随机访问。
set:类似于数学中的集合,每个元素只出现一次,用于去重。
map:基于红黑树实现,维护键值对有序序列。
unordered_set和 unordered_map:基于哈希表实现,键值对无序。
STL容器操作
插入和删除:
对于vector、string和deque,使用`erase-remove`惯用法。
对于list,使用`list::remove`。
对于关联容器,使用`erase`成员函数。
遍历:
使用迭代器遍历容器,例如`for(auto it = container.begin(); it != container.end(); ++it)`。
访问元素:
使用下标访问:`container[index]`。
使用迭代器访问:`*it`。
注意事项
避免编写独立于容器类型的代码:不同容器有不同的成员函数,应尽量使用通用接口。
确保对象拷贝正确而高效:实现拷贝构造函数和拷贝赋值运算符,考虑使用智能指针。
使用`empty`而不是`size()`检查是否为空:`empty`是常数时间操作,而`size()`在一些list实现中可能是线性时间。
区间成员函数优先:使用区间成员函数(如`lower_bound`)通常比单元素成员函数更高效且方便。
管理动态分配的内存:如果容器中包含通过`new`分配的指针,确保在容器对象析构前释放这些指针,或使用`shared_ptr`。
示例代码
```cpp
include include include include int main() { // vector示例 std::vector vec.push_back(1); vec.push_back(2); vec.push_back(3); // 遍历vector for(auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // set示例 std::set s.insert(3); s.insert(1); s.insert(2); // 遍历set for(auto it = s.begin(); it != s.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; } ``` 以上是使用STL的一些基本方法和注意事项。