STL容器
STL容器主要有,动态数组vector,循环双向链表list,双端队列deque,栈stack,
Vector容器
#include <vector> //头文件
vector<int> a; //定义了一个int类型的vector容器a
vector<int> b[100]; //定义了一个int类型的vector容器b组
struct rec
{
···
};
vector<rec> c; //定义了一个rec类型的vector容器c
vector<int>::iterator it; //vector的迭代器,与指针类似
a.size() //返回实际长度(元素个数),O(1)复杂度
a.empty() //容器为空返回1,否则返回0,O(1)复杂度
a.clear() //把vector清空
a.begin() //返回指向第一个元素的迭代器,*a.begin()与a[0]作用相同
a.end() //越界访问,指向vector尾部,指向第n个元素再往后的边界
a.front() //返回第一个元素的值,等价于*a.begin和a[0]
a.back() //返回最后一个元素的值,等价于*--a.end()和a[size()-1]
a.push_back(x) //把元素x插入vector尾部
a.pop_back() //删除vector中最后一个元素
- 迭代器使用与指针类似,可如下遍历整个容器。
for ( vector<int>::iterator it=a.begin() ; it!=a.end() ; it++ )
cout<<*iterator<<endl;
- 当成数组使用。
for( int i=0;i<a.size();i++) cout<<a[i]<<endl;
List容器
//1.定义和初始化
list<int> lst1; //创建空list
list<int> lst2(3); //创建含有三个元素的list
list<int> lst3(3,2); //创建含有三个元素为2的list
list<int> lst4(lst2); //使用lst2初始化lst4
list<int> lst5(lst2.begin(), lst2.end()); //同lst4
//2.常用操作方法
lst1.assign(lst2.begin(),lst2.end()); //分配3个值为0的元素
lst1.push_back(10); //末尾添加值
lst1.pop_back(); //删除末尾值
lst1.begin(); //返回首值的迭代器
lst1.end(); //返回尾值的迭代器
lst1.clear(); //清空值
bool isEmpty1 = lst1.empty(); //判断为空
lst1.erase(lst1.begin(),lst1.end()); //删除元素
lst1.front(); //返回第一个元素的引用
lst1.back(); //返回最后一个元素的引用
lst1.insert(lst1.begin(), 3, 2); //从指定位置插入个3个值为2的元素
lst1.rbegin(); //返回第一个元素的前向指针
lst1.remove(2); //相同的元素全部删除
lst1.reverse(); //反转
lst1.size(); //含有元素个数
lst1.sort(); //排序
lst1.unique(); //删除相邻重复元素
//3.遍历
//迭代器法
for(list<int> :: const_iterator iter = lst1.begin(); iter != lst1.end(); iter++)
{
cout<<*iter;
}
Queue容器
#include <queue>
queue<string> myqueue;
queue<int> myqueue_int;
- front(): 返回 queue 中第一个元素的引用。
- back(): 返回 queue 中最后一个元素的引用。
- push(const T& obj): 在 queue 的尾部添加一个元素的副本。
- pop(): 删除 queue 中的第一个元素。
- size(): 返回 queue 中元素的个数。
- empty(): 如果 queue 中没有元素的话,返回 true
Stack容器
-
top():
返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
-
push(const T& obj):
可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
-
push(T&& obj):
以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
-
pop():
弹出栈顶元素。
-
size():
返回栈中元素的个数。
#include <iostream>
#include <stack> //头文件
using namespace std;
stack<string> myStack; //声明一个栈
Map容器(映射)
map 是一个关联容器,它提供一对一的 hash。
-
第一个可以称为关键字(key),每个关键字只能在 map 中出现一次
-
第二个可能称为该关键字的值(value)
#include <iostream> #include <map> using namespace std; map<char, int> mymap1; //定义方式 map<string, int> mymap2;
看容量
int map.size();//查询map中有多少对元素
bool empty();// 查询map是否为空
插入
map.insert(make_pair(key,value));
//或者
map.insert(pair<char, int>(key, value))
//或者
map[key]=value
取值
map<int, string> map;
//如果map中没有关键字2233,使用[]取值会导致插入
//因此,下面语句不会报错,但会使得输出结果结果为空
cout<<map[2233]<<endl;
//但是使用使用at会进行关键字检查,因此下面语句会报错
map.at(2016) = "Bob";
遍历
map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{
cout << "key" << it->first << endl;
cout << "value" << it->second << endl;
}
查找
m.count(key)://由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
m.find(key)://返回迭代器,判断是否存在。
标签:容器,begin,lst1,map,STL,元素,C++,vector
From: https://www.cnblogs.com/ysfxt/p/17161588.html