📜  STL集C++中的插入和删除(1)

📅  最后修改于: 2023-12-03 15:35:09.644000             🧑  作者: Mango

STL集C++中的插入和删除

在C++中,STL是一个非常有用的工具集,它提供了很多数据结构和算法函数。其中,插入和删除是两个非常基础的操作,本文将介绍C++中STL集中的插入和删除操作。

插入操作

STL提供了很多不同类型的容器,每种容器都有自己独特的插入方式。下面将分别介绍一些常用容器的插入操作。

vector

vector是一个动态数组,可以根据需要自动扩展。vector的插入操作有以下几种方式。

在末尾追加元素

std::vector<int> v{1, 2, 3};
v.push_back(4);

在指定位置插入元素

std::vector<int> v{1, 2, 3};
auto it = v.begin() + 1;
v.insert(it, 4);

插入多个元素

std::vector<int> v{1, 2, 3};
auto it = v.begin() + 1;
v.insert(it, {4, 5, 6});
list

list是一个双向链表,每个节点都存储了一个元素。list的插入操作有以下几种方式。

在末尾追加元素

std::list<int> l{1, 2, 3};
l.push_back(4);

在头部插入元素

std::list<int> l{1, 2, 3};
l.push_front(0);

在指定位置插入元素

std::list<int> l{1, 2, 3};
auto it = l.begin()++;
l.insert(it, 4);

插入多个元素

std::list<int> l{1, 2, 3};
auto it = l.begin()++;
l.insert(it, {4, 5, 6});
set和map

set和map都是基于红黑树实现的,插入操作有以下几种方式。

插入单个元素

std::set<int> s{1, 2, 3};
s.insert(4);

插入key和value都为单个元素

std::map<int, std::string> m{{1, "one"}, {2, "two"}, {3, "three"}};
m.insert({4, "four"});

插入key和value都为多个元素

std::map<int, std::string> m{{1, "one"}, {2, "two"}, {3, "three"}};
m.insert({{4, "four"}, {5, "five"}, {6, "six"}});
unordered_set和unordered_map

unordered_set和unordered_map是基于哈希表实现的,插入操作有以下几种方式。

插入单个元素

std::unordered_set<int> us{1, 2, 3};
us.insert(4);

插入key和value都为单个元素

std::unordered_map<int, std::string> um{{1, "one"}, {2, "two"}, {3, "three"}};
um.insert({4, "four"});

插入key和value都为多个元素

std::unordered_map<int, std::string> um{{1, "one"}, {2, "two"}, {3, "three"}};
um.insert({{4, "four"}, {5, "five"}, {6, "six"}});
删除操作

STL中的容器提供了很多种删除元素的方式,下面将介绍一些常用容器的删除操作。

vector

vector的删除操作主要有以下几种方式。

删除末尾元素

std::vector<int> v{1, 2, 3};
v.pop_back();

删除指定位置元素

std::vector<int> v{1, 2, 3};
auto it = v.begin() + 1;
v.erase(it);

删除一段元素

std::vector<int> v{1, 2, 3, 4, 5};
auto it1 = v.begin() + 1;
auto it2 = v.begin() + 3;
v.erase(it1, it2);
list

list的删除操作主要有以下几种方式。

删除头部元素

std::list<int> l{1, 2, 3};
l.pop_front();

删除尾部元素

std::list<int> l{1, 2, 3};
l.pop_back();

删除指定位置元素

std::list<int> l{1, 2, 3};
auto it = l.begin()++;
l.erase(it);

删除一段元素

std::list<int> l{1, 2, 3, 4, 5};
auto it1 = l.begin()++;
auto it2 = l.begin()++ + 3;
l.erase(it1, it2);
set和map

set和map的删除操作主要有以下几种方式。

删除指定元素

std::set<int> s{1, 2, 3};
s.erase(2);

删除指定迭代器位置元素

std::set<int> s{1, 2, 3};
auto it = s.find(2);
s.erase(it);

删除一段元素

std::set<int> s{1, 2, 3, 4, 5};
auto it1 = s.find(2);
auto it2 = s.find(4);
s.erase(it1, it2);
unordered_set和unordered_map

unordered_set和unordered_map的删除操作方式和set和map基本相同。

结语

以上就是C++中STL集中的插入和删除操作的介绍。STL提供了非常丰富的数据结构和算法函数,程序员们可以根据实际需要选择合适的数据结构和算法函数来解决具体的问题。