STL容器主要分为顺序容器和关联容器两大类:
1.顺序容器包括:vector、string、deque、list 注意:string没有虚析构函数,不适合做共有继承
2.关联容器包括两大类:
2.1 有序容器:map、set、multimap、multiset;起重multimap和multiset可允许出现重复关键字的元素
2.2 无序容器:unordered_map、unordered_set、unordered_multimap和unordered_set,其中unordered_map和unordered_set得头文件是<unordered_map>和<unordered_set>,并且它们也允许出现重复关键字的元素。
//无序容器示例代码如下:
#include "stdafx.h"
#include <iostream>
#include <unordered_map>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
std::unordered_map<int, string> unorderedMapDataTest;
unorderedMapDataTest.insert(std::pair<int, string>(3, "xiaoping"));
unorderedMapDataTest.insert(std::make_pair(1, "tiantian"));
unorderedMapDataTest.insert(std::pair<int, string>(2, "ganggang"));
return 0;
}
现在返回来说STL容器中某个元素的删除,如果是顺序容器,则写一个循环来遍历容器中的元素,记住每次调用erase时,要使用它的返回值更新迭代器,因为一旦顺序容器erase完成,则返回指向被删除元素的下一个元素的有效迭代器,示意删除代码如下:
std::vector<int> vectorDataTest(0, 3);
vectorDataTest.push_back(5);
vectorDataTest.push_back(6);
vectorDataTest.push_back(7);
for (auto iter = vectorDataTest.begin(); iter != vectorDataTest.end(); )
{
if (5 == *iter) {
iter = vectorDataTest.erase(iter);
} else {
++iter;
}
}
如果容器是一个标准关联容器的场合,则写一个循环来遍历删除容器中的元素,记住当把迭代器传给erase时,要对迭代器做后缀递增。因为对于标准关联容器,erase的返回类型是void。示意代码如下:
std::unordered_map<int, string> unorderedMapDataTest;
unorderedMapDataTest.insert(std::pair<int, string>(3, "xiaoping"));
unorderedMapDataTest.insert(std::make_pair(1, "tiantian"));
unorderedMapDataTest.insert(std::pair<int, string>(2, "ganggang"));
for(auto iter = unorderedMapDataTest.begin(); iter != unorderedMapDataTest.end(); )
{
if (0 == strcmp(iter->second.c_str(), "xiaoping")) {
unorderedMapDataTest.erase(iter++);
} else {
++iter;
}
}