1.vector类(容器)-初始化、添加和插入
#include <iostream>
#include <vector>
using namespace std;
void main() {
//方式一
cout << "初始化方式1:" << endl;
vector<char> vt;
vt.push_back('A');
vt.push_back('B');
vt.push_back('C');
vt.push_back('D');
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
cout << endl << "初始化方式2:" << endl;
//方式二
vector<char> vt1 = vt;
for (int i = 0; i < vt1.size(); ++i) {
cout << vt1[i] << endl;
}
//方式三:复制(指定复制多少内容)
cout << endl << "初始化方式3:" << endl;
cout << endl << "复制所有" << endl;
//以下复制所有
vector<char> vt2(vt.begin(), vt.end());
for (int i = 0; i < vt2.size(); ++i) {
cout << vt1[i] << endl;
}
cout << endl << "复制指定内容" << endl;
//指定复制内容(复制一部分)
vector<char> vt3(vt.begin(), vt.begin() + 2);
for (int i = 0; i < vt3.size(); ++i) {
cout << vt3[i] << endl;
}
cout << endl;
cout << "插入操作" << endl;
//插入内容
vt.insert(vt.end()-1, 'G');
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
getchar();
}
执行代码
初始化方式1:
A
B
C
D
初始化方式2:
A
B
C
D
初始化方式3:
复制所有
A
B
C
D
复制指定内容
A
B
插入操作
A
B
C
G
D
注意:
vt.size()
在容器说明中 被定义为:unsigned int
类型, 而i
是int
类型,所以会出警告:
C4018 “<”: 有符号/无符号不匹配
正确写法:
for (unsigned int i = 0; i < vt.size(); ++i)
为了方便大家理解我写成int型, 大家在自己项目中要写正确的数据类型。
2.vector类(容器)-修改和删除
#include <iostream>
#include <vector>
using namespace std;
void main() {
vector<char> vt;
vt.push_back('A');
vt.push_back('B');
vt.push_back('C');
vt.push_back('D');
//10.1 修改
cout << "修改:" << endl;
cout << "头尾方式修改" << endl;
//访问头部
vt.front() = 'a';
//访问尾部
vt.back() = 'd';
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
cout << endl << "下标的方式修改" << endl;
//采用下标的方式修改
vt[0] = 'j';
vt[vt.size() - 1] = 'p';
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
//10.2 删除元素
//删除尾部
vt.pop_back();
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
//删除所有
while (vt.size() > 0) {
vt.pop_back();
}
vt.push_back('A');
vt.push_back('B');
vt.push_back('C');
vt.push_back('D');
cout << endl << "指定删除元素" << endl;
//指定删除元素
vt.erase(vt.begin() + 1);
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
//删除所有
while (vt.size() > 0) {
vt.pop_back();
}
vt.push_back('A');
vt.push_back('B');
vt.push_back('C');
vt.push_back('D');
cout << endl << "指定区间删除" << endl;
//指定区间删除
vt.erase(vt.begin(), vt.begin() + 2);
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
getchar();
}
执行代码
修改:
头尾方式修改
a
B
C
d
下标的方式修改
j
B
C
p
j
B
C
指定删除元素
A
C
D
指定区间删除
C
D
3.vector类(容器)-遍历
#include <iostream>
#include <vector>
using namespace std;
void main() {
vector<char> vt;
vt.push_back('A');
vt.push_back('B');
vt.push_back('C');
//方式1
cout << endl << "方式1:" << endl;
for (int i = 0; i < vt.size(); ++i) {
cout << vt[i] << endl;
}
//方式2:迭代器遍历-正向
cout << endl << "方式2" << endl;
cout << "迭代器遍历-正向" << endl;
for (vector<char>::iterator it = vt.begin(); it < vt.end(); it++) {
cout << *it << endl;
}
//方式2:迭代器遍历-反向
cout << "迭代器遍历-反向" << endl;
for (vector<char>::reverse_iterator it = vt.rbegin(); it < vt.rend(); it++) {
cout << *it << endl;
}
////Android 可以如下例子写,AS中可能回报vector iterators incompatible !错误
//for (vector<char>::iterator it = vt.begin(); it < vt.end(); it++) {
// if (*it == 'A') {
// vt.erase(it);
// }
//
//}
//AS中正确写法,如下
for (vector<char>::iterator it = vt.begin(); it < vt.end();) {
if (*it == 'A')
{
it = vt.erase(it);
}else
{
++it;
}
}
cout << endl << "利用迭代器遍历删除元素" << endl;
for (vector<char>::iterator it = vt.begin(); it < vt.end(); it++) {
cout << *it << endl;
}
getchar();
}
执行代码
方式1:
A
B
C
方式2
迭代器遍历-正向
A
B
C
迭代器遍历-反向
C
B
A
利用迭代器遍历删除元素
B
C
4.queue队列-基本使用
#include <iostream>
#include <queue>
using namespace std;
void main() {
//初始化
queue<char> q;
cout << endl << "添加元素" << endl;
//添加元素
q.push('A');
q.push('B');
q.push('C');
cout << endl << "队列大小:" << q.size() << endl;
//添加头部
q.front() = 'O';
//添加尾部
q.back() = 'D';
cout << endl << "添加头部、尾部(原来有就覆盖)" << endl;
cout << endl << "队列大小:" << q.size() << endl;
//删除操作
while (!q.empty()) {
cout << q.front() << endl;
//删除
q.pop();
}
getchar();
}
执行代码
添加元素
队列大小:3
添加头部、尾部(原来有就覆盖)
队列大小:3
O
B
D
5.queue队列-优先级
#include <iostream>
#include <queue>
#include <functional>
using namespace std;
void main() {
cout << endl << "添加元素(默认是按照添加的顺序排列)" << endl;
//5.1 添加元素(默认是按照添加的顺序排列)
queue<int> q;
q.push(10);
q.push(50);
q.push(20);
q.push(5);
//打印
while (!q.empty()) {
cout << q.front() << endl;
q.pop();
}
cout << endl << "最大值优先级队列(从大到小排列)" << endl;
//5.2 最大值优先级队列(从大到小排列)
priority_queue<int> pq1;
pq1.push(10);
pq1.push(50);
pq1.push(20);
pq1.push(5);
while (!pq1.empty()) {
cout << pq1.top() << endl;
pq1.pop();
}
cout << endl << "最小值优先级队列" << endl;
//5.3 最小值优先级队列
//注意:不同额编译器对语法检查有差别
//在AS中进行NDK开发>>符号认为运算符,所以为了避免出现这样的情况,请用空格分离'> >'
priority_queue<int, vector<int>, greater<int> > pq2;
pq2.push(10);
pq2.push(50);
pq2.push(20);
pq2.push(5);
while (!pq2.empty()) {
cout << pq2.top() << endl;
pq2.pop();
}
getchar();
}
执行代码
添加元素(默认是按照添加的顺序排列)
10
50
20
5
最大值优先级队列(从大到小排列)
50
20
10
5
最小值优先级队列
5
10
20
50
6.deque类(双向队列)-基本使用
#include <iostream>
#include <deque>
using namespace std;
void main() {
cout << endl << "添加元素" << endl;
deque<char> dq;
//6.1 添加元素
//头部添加
dq.push_front('A');
dq.push_front('B');
dq.push_front('C');
//尾部添加
dq.push_back('D');
dq.push_back('E');
dq.push_back('F');
for (deque<char>::iterator it = dq.begin(); it < dq.end(); it++) {
cout << *it << endl;
}
cout << endl << "修改头部、尾部" << endl;
//修改头部、尾部
dq.back() = 'z';
dq.front() = 'a';
for (deque<char>::iterator it = dq.begin(); it < dq.end(); it++) {
cout << *it << endl;
}
cout << endl << "删除头部、尾部" << endl;
//6.2 删除
//删除第一个
dq.pop_front();
// //删除最后一个
dq.pop_back();
for (deque<char>::iterator it = dq.begin(); it < dq.end(); it++) {
cout << *it << endl;
}
//6.3 查找一个元素位置
//首先获取元素下标指针
deque<char>::iterator p_index = find(dq.begin(), dq.end(), 'D');
if (p_index != dq.end()) {
//这个方法就是计算两个指针直接的距离
int index = distance(dq.begin(), p_index);
cout << endl << "查找D元素位置" << endl;
cout << index << endl;
}
getchar();
}
执行代码
添加元素
C
B
A
D
E
F
修改头部、尾部
a
B
A
D
E
z
删除头部、尾部
B
A
D
E
查找D元素位置
2
7.stack栈-基本使用
#include <iostream>
#include <stack>
using namespace std;
void main() {
stack<int> st;
st.push(10);
st.push(20);
st.push(30);
while (!st.empty()) {
cout << st.top() << endl;
st.pop();
}
getchar();
}
执行代码
30
20
10