Android(安卓)NDK开发之旅28--C++--vector容器、queue队列、stack栈
16lz
2021-01-25
Android NDK开发之旅 目录
1.vector类(容器)-初始化、添加和插入
#include #include using namespace std;void main() { //方式一 cout << "初始化方式1:" << endl; vector 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 vt1 = vt; for (int i = 0; i < vt1.size(); ++i) { cout << vt1[i] << endl; } //方式三:复制(指定复制多少内容) cout << endl << "初始化方式3:" << endl; cout << endl << "复制所有" << endl; //以下复制所有 vector vt2(vt.begin(), vt.end()); for (int i = 0; i < vt2.size(); ++i) { cout << vt1[i] << endl; } cout << endl << "复制指定内容" << endl; //指定复制内容(复制一部分) vector 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:ABCD初始化方式2:ABCD初始化方式3:复制所有ABCD复制指定内容AB插入操作ABCGD
注意:
vt.size()
在容器说明中 被定义为:unsigned int
类型, 而i
是int
类型,所以会出警告:
C4018 “<”: 有符号/无符号不匹配
正确写法:
for (unsigned int i = 0; i < vt.size(); ++i)
为了方便大家理解我写成int型, 大家在自己项目中要写正确的数据类型。
2.vector类(容器)-修改和删除
#include #include using namespace std;void main() { vector 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();}
执行代码
修改:头尾方式修改aBCd下标的方式修改jBCpjBC指定删除元素ACD指定区间删除CD
3.vector类(容器)-遍历
#include #include using namespace std;void main() { vector 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::iterator it = vt.begin(); it < vt.end(); it++) { cout << *it << endl; } //方式2:迭代器遍历-反向 cout << "迭代器遍历-反向" << endl; for (vector::reverse_iterator it = vt.rbegin(); it < vt.rend(); it++) { cout << *it << endl; } ////Android 可以如下例子写,AS中可能回报vector iterators incompatible !错误 //for (vector::iterator it = vt.begin(); it < vt.end(); it++) { // if (*it == 'A') { // vt.erase(it); // } // //} //AS中正确写法,如下 for (vector::iterator it = vt.begin(); it < vt.end();) { if (*it == 'A') { it = vt.erase(it); }else { ++it; } } cout << endl << "利用迭代器遍历删除元素" << endl; for (vector::iterator it = vt.begin(); it < vt.end(); it++) { cout << *it << endl; } getchar();}
执行代码
方式1:ABC方式2迭代器遍历-正向ABC迭代器遍历-反向CBA利用迭代器遍历删除元素BC
4.queue队列-基本使用
#include #include using namespace std;void main() { //初始化 queue 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添加头部、尾部(原来有就覆盖)队列大小:3OBD
5.queue队列-优先级
#include #include #include using namespace std;void main() { cout << endl << "添加元素(默认是按照添加的顺序排列)" << endl; //5.1 添加元素(默认是按照添加的顺序排列) queue 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 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, greater > pq2; pq2.push(10); pq2.push(50); pq2.push(20); pq2.push(5); while (!pq2.empty()) { cout << pq2.top() << endl; pq2.pop(); } getchar();}
执行代码
添加元素(默认是按照添加的顺序排列)1050205最大值优先级队列(从大到小排列)5020105最小值优先级队列5102050
6.deque类(双向队列)-基本使用
#include #include using namespace std;void main() { cout << endl << "添加元素" << endl; deque 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::iterator it = dq.begin(); it < dq.end(); it++) { cout << *it << endl; } cout << endl << "修改头部、尾部" << endl; //修改头部、尾部 dq.back() = 'z'; dq.front() = 'a'; for (deque::iterator it = dq.begin(); it < dq.end(); it++) { cout << *it << endl; } cout << endl << "删除头部、尾部" << endl; //6.2 删除 //删除第一个 dq.pop_front(); // //删除最后一个 dq.pop_back(); for (deque::iterator it = dq.begin(); it < dq.end(); it++) { cout << *it << endl; } //6.3 查找一个元素位置 //首先获取元素下标指针 deque::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();}
执行代码
添加元素CBADEF修改头部、尾部aBADEz删除头部、尾部BADE查找D元素位置2
7.stack栈-基本使用
#include #include using namespace std;void main() { stack st; st.push(10); st.push(20); st.push(30); while (!st.empty()) { cout << st.top() << endl; st.pop(); } getchar();}
执行代码
302010
特别感谢:
Dream
更多相关文章
- GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
- android Binder的使用方式 示例
- curl: (22) The requested URL returned error: 404 Not Found S
- Android隐藏标题栏
- Android全屏显示(隐藏项目名和通知栏)
- 如何查看USB方式连接Android设备的外接设备信息
- Android(安卓)studio常用插件
- Android(安卓)Service启动方式总结
- Volley的基本使用