1.vector
- pop_back():删除vector的最后一个元素,不返回被删除的元素
- clear():清空vector中的所有元素
- insert():
insert(要插入的地址,要插入的元素);
v.insert(v.begin()+2,-1); //将-1插入v[2]的位置
- erase():删除指定位置的元素
- 删除一个元素
//删除v[3] v.erase(v.begin()+3);
- 删除一个区间内的元素
//删除v[1]到v[4]的元素 v.erase(v.begin()+1,v.begin()+4);
- 删除一个元素
- empty():判断容器是否为空,如果vector为空,函数返回true;否则,返回false
2.set
-
定义:set是一个内部自动有序且不含重复元素的容器,像定义变量一样定义set变量
set<类型名> 变量名; set<类型名> array[SIZE];
-
元素的访问:只能通过迭代器(iterator)访问
set<int>::iterator it;
这样,就得到了迭代器it,并且可以通过*it来访问set里的元素。
-
insert():插入元素十分简单。
-
find():find(value)返回的是set中value所对应的迭代器,也就是value的指针(地址)。
#include <iostream> #include <set> using namespace std; int main() { set<int> st; for (int i = 1; i <= 3; i++) { st.insert(i); } set<int>::iterator it = st.find(2); //在set中查找2,返回其迭代器 cout << *it << endl; // 第二种写法 cout << *(st.find(2)) << endl; return 0; }
-
erase():erase()有两种用法,删除单个元素、删除一个区间内的所有元素。
-
删除单个元素:
st.erase(value)
,value为所需要删除元素的值。其时间复杂度为O(logN),N为set内的元素个数。// 删除单个元素 st.erase(100);
-
删除一个区间内的所有元素:
st.erase(iteratorBegin , iteratorEnd)
可以删除一个区间内的所有元素。其中iteratorBegin
为所需要删除区间的起始迭代器iteratorEnd
为所需要删除区间的结束迭代器的下一个地址,也即是[iteratorBegin,iteratorEnd)#include <iostream> #include <set> using namespace std; //删除一个区间内的所有元素 int main() { set<int> st; st.insert(100); st.insert(200); st.insert(100); st.insert(300); set<int>::iterator it = st.find(200); st.erase(it, st.end()); for (it = st.begin(); it != st.end(); it++) { cout << *it << endl; } return 0; }
-
3.map
map
是一个关联容器,它存储的是键值对,其中每个键都唯一地映射到一个值。键值对在map
中按照键的顺序进行排序。map
通常实现为红黑树,这是一种自平衡二叉搜索树。因此,大多数操作(如插入、删除、查找)的时间复杂度为O(log n),其中n是map
中元素的数量。
(1)元素的访问
-
通过下标进行访问,如:
maps['c']=5;
-
通过迭代器进行访问:map可以使用it->first来访问键,使用it->second访问值
#include<map> #include<iostream> using namespace std; int main() { map<char,int>maps; maps['d']=10; maps['e']=20; maps['a']=30; for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) { cout<<it->first<<" "<<it->second<<endl; } return 0; }
(2)成员函数
-
insert()
: 插入键值对到map
中。如果键已存在,则插入操作会失败// 定义一个map对象 map<int, string> m; //用insert函数插入pair m.insert(pair<int, string>(111, "kk")); // 用数组方式插入 m[123] = "dd"; m[456] = "ff";
-
find()
: 查找给定键的元素,返回指向该元素的迭代器。如果未找到,则返回指向map::end
的迭代器map<string,int>::iterator it=maps.find("123");
-
erase()
: 删除指定键的元素- 使用键直接删除
map<int, string> myMap; myMap[1] = "one"; myMap[2] = "two"; myMap.erase(1); // 删除键为1的元素
2.使用迭代器范围删除
myMap.erase(myMap.begin(), myMap.find(2)); // 删除从begin()到find(2)(不包括find(2)指向的元素)的所有元素
-
clear()
: 清空map
,删除所有元素。 -
empty()
: 检查map
是否为空。 -
size()
: 返回map
中元素的数量。
4.stack
stack
是一种容器适配器,模拟了一种先进后出(LIFO,Last In First Out)的数据结构。它只允许在栈顶添加(push)或移除(pop)元素,这意味着只有最后被添加进栈的元素才能被访问和移除。
(1)基本操作
- push: 向栈顶添加一个元素。
- pop: 移除栈顶的元素。注意,
pop
操作不返回被移除的元素。 - top: 访问栈顶的元素。
- empty: 检查栈是否为空。
- size: 返回栈中元素的数量。
(2)使用示例
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> myStack;
// 向栈中添加元素
myStack.push(10);
myStack.push(20);
cout << "Top element: " << myStack.top() << endl; // 输出: 20
// 移除栈顶元素
myStack.pop();
cout << "Top element after pop: " << myStack.top() << endl; // 输出: 10
// 检查栈是否为空
if (!myStack.empty()) {
cout << "Stack is not empty" << endl;
}
return 0;
}
5.queue
queue
是一种容器适配器,它提供了先进先出(FIFO, First In First Out)的数据结构模型。queue
允许在队列的末尾添加新元素,并从队列的开头移除元素,这模拟了现实生活中队列的行为。
(1)基本操作
- push(): 在队列的末尾添加一个元素。
- pop(): 移除队列开头的元素。注意,
pop
操作不返回被移除的元素。 - front(): 访问队列开头的元素。
- back(): 访问队列末尾的元素。
- empty(): 检查队列是否为空。
- size(): 返回队列中元素的数量。
(2)使用示例
#include <iostream>
#include <queue>
int main() {
queue<int> myQueue;
myQueue.push(1);
myQueue.push(2);
myQueue.push(3);
cout << "Front element: " << myQueue.front() << endl; // 输出: 1
cout << "Back element: " << myQueue.back() << endl; // 输出: 3
// 移除队列的第一个元素
myQueue.pop();
// 再次访问队列的第一个元素
cout << "Front element after pop: " << myQueue.front() << endl; // 输出: 2
// 检查队列是否为空
if (!myQueue.empty()) {
cout << "Queue is not empty" << endl;
}
return 0;
}