NDK-CPP语言-queue队列+stack栈+list+set+map
来源:互联网 发布:java编程思想4 pdf 编辑:程序博客网 时间:2024/06/11 22:15
com_tz_ndk_cpp_NDKCpp.h
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_tz_ndk_cpp_NDKCpp */#ifndef _Included_com_tz_ndk_cpp_NDKCpp#define _Included_com_tz_ndk_cpp_NDKCpp#ifdef __cplusplusextern "C" {#endif/* * Class: com_tz_ndk_cpp_NDKCpp * Method: callCppTest * Signature: ()V */JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppQueue (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppQueuePriority (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppStack (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppList (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppListDelete (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppListInsert (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSet (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetReverse (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetSort (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetFind (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMultiSet (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMap (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMapDelete (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMapFind (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMultiMap (JNIEnv *, jobject);JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppVectorCopy (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
com_tz_ndk_cpp_NDKCpp.cpp
#include <iostream>#include <string>#include <android/log.h>#include "com_tz_ndk_cpp_NDKCpp.h"using namespace std;//1.C++语言:queue队列-基本使用#include <queue>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppQueue (JNIEnv *, jobject){ //初始化 queue<char> q; //添加元素 q.push('A'); q.push('B'); q.push('C'); //添加头部// q.front() = 'z'; //添加尾部// q.back() = 'D'; //删除操作 while (!q.empty()){ __android_log_print(ANDROID_LOG_INFO,"main","值: %c",q.front()); //删除 q.pop(); }}//2.C++语言:queue队列-优先级JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppQueuePriority (JNIEnv *, jobject){ //2.1 添加元素(默认是按照添加的顺序排列)// queue<int> q;// q.push(10);// q.push(50);// q.push(20);// q.push(5);// //打印// while (!q.empty()){// __android_log_print(ANDROID_LOG_INFO,"main","值: %d",q.front());// q.pop();// } //2.2 最大值优先级队列(从大到小排列)// priority_queue<int> pq1;// pq1.push(10);// pq1.push(50);// pq1.push(20);// pq1.push(5);// while (!pq1.empty()){// __android_log_print(ANDROID_LOG_INFO,"main","值: %d",pq1.top());// pq1.pop();// } //2.3 最小值优先级队列 //注意:不同额编译器对语法检查有差别 //在AS中进行NDK开发>>符号认为运算符,所以为了避免出现这样的情况,请用空格分离'> >' priority_queue<int,vector<int>,greater<int> > pq1; pq1.push(10); pq1.push(50); pq1.push(20); pq1.push(5); while (!pq1.empty()){ __android_log_print(ANDROID_LOG_INFO,"main","值: %d",pq1.top()); pq1.pop(); }}//3.C++语言:stack栈-基本使用#include <stack>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppStack (JNIEnv *, jobject){ stack<int> st; st.push(10); st.push(20); st.push(30); while (!st.empty()){ __android_log_print(ANDROID_LOG_INFO,"main","值: %d",st.top()); st.pop(); }}//4.C++语言:list-基本使用#include <list>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppList (JNIEnv *, jobject){ list<int> lt; //从头部添加 lt.push_front(10); lt.push_front(20); lt.push_front(30); //从尾部添加 lt.push_back(40); lt.push_back(50); lt.push_back(60); //循环遍历 for (list<int>::iterator it = lt.begin() ; it != lt.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); } list<int>::iterator it = lt.begin(); //连续相加允许(++) //支持'++'、'--'运算符 it++; it--; //注意:不支持间断 //不支持'+'、'-'运算度// it = it - 1;}//5.C++语言:list-删除JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppListDelete (JNIEnv *, jobject){ list<int> lt; //从头部添加 lt.push_front(10); lt.push_front(20); lt.push_front(30); //从尾部添加 lt.push_back(40); lt.push_back(50); lt.push_back(60); //方式一// list<int>::iterator it = lt.begin();// it++;// //删除:删除第二个元素// lt.erase(it); //方式二 //删除第二个元素(直接根据内容删除)// lt.remove(20); //方式三:区间删除 //开始位置 list<int>::iterator it_begin = lt.begin(); //结束位置 list<int>::iterator it_end = lt.begin(); it_end++; it_end++; //删除元素(如果已经被删除的元素不能够在删除) lt.erase(it_begin,it_end); //循环遍历 for (list<int>::iterator it = lt.begin() ; it != lt.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); }}//6.C++语言:list-插入JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppListInsert (JNIEnv *, jobject){ list<int> lt; //从尾部添加 lt.push_back(40); lt.push_back(50); lt.push_back(60); //插入 lt.insert(lt.begin(),30); //循环遍历 for (list<int>::iterator it = lt.begin() ; it != lt.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); }}//7.C++语言:set-基本使用(元素唯一)-默认从小到大排列//特点一:元素唯一//特点二:默认从小到大排列#include <set>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSet (JNIEnv *, jobject){ set<int> st; st.insert(40); st.insert(10); st.insert(30); st.insert(20); //删除 set<int>::iterator it = st.begin(); st.erase(it); for (set<int>::iterator it = st.begin() ; it != st.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); }}//8.C++语言:set-基本使用(元素唯一)-从大到小排列//set<int,greater<int>>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetReverse (JNIEnv *, jobject){ set<int,greater<int> > st; st.insert(40); st.insert(10); st.insert(30); st.insert(20); for (set<int>::iterator it = st.begin() ; it != st.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); }}//9.C++语言:set-自定义排序规则//需求:根据学生的成绩进行排序class Student{private: char* name; int score;public: Student(char* name,int score){ this->name = name; this->score = score; } int getScore(){ return this->score; } void printStudent(){ __android_log_print(ANDROID_LOG_INFO,"main","姓名: %s, 成绩: %d",this->name,this->score); }};//仿函数struct Soft{ //方式一:不写常量// bool operator()(Student &left,Student &right){// return left.getScore() < right.getScore();// } //方式二:const修饰 bool operator()(const Student &left,const Student &right){ //类型转换 Student stu_left = const_cast<Student&>(left); Student stu_right = const_cast<Student&>(right); return stu_left.getScore() < stu_right.getScore(); }};JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetSort (JNIEnv *, jobject){ set<Student,Soft> st; st.insert(Student("小宇",50)); st.insert(Student("梦想",59)); st.insert(Student("song",55)); st.insert(Student("远方",58)); st.insert(Student("石桥中化妖",40)); for (set<Student>::iterator it = st.begin() ; it != st.end() ; it++){ Student stu = const_cast<Student&>(*it); stu.printStudent(); }}//10.C++语言:set-查找JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppSetFind (JNIEnv *, jobject){ set<int> st; st.insert(10); st.insert(20); st.insert(30); st.insert(40); st.insert(50); st.insert(60); st.insert(70); //方式一 //查找等于30元素 //st.find(2); //方式二 //查找等于或者小余35元素 //如果存在你输入的值30,那么就返回当前值30(例如:30) //如果不存在你查找的值31,那么返回大于31的最近的一个元素指针 set<int>::iterator it_lower = st.lower_bound(31); __android_log_print(ANDROID_LOG_INFO,"main","查找结果: %d",*it_lower); //如果存在你查找的值30,那么就返回大于30最近的一个元素指针40 //如果不存在你查找的值31,那么就返回大于31最近的一个元素的指针40 set<int>::iterator it_upper = st.upper_bound(31); __android_log_print(ANDROID_LOG_INFO,"main","查找结果: %d",*it_upper); //方式三:既要返回最小也要最大 pair<set<int>::iterator,set<int>::iterator> p = st.equal_range(30); //获取返回的元素 __android_log_print(ANDROID_LOG_INFO,"main","小: %d",*p.first); __android_log_print(ANDROID_LOG_INFO,"main","大: %d",*p.second);}//11.C++语言:multiset-基本使用//允许存储重复元素//默认升序排列JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMultiSet (JNIEnv *, jobject){ //升序// multiset<int> mst;// mst.insert(10);// mst.insert(20);// mst.insert(30);// mst.insert(10);//// for (multiset<int>::iterator it = mst.begin() ; it != mst.end() ; it++){// __android_log_print(ANDROID_LOG_INFO,"main","值: %d",*it);// } //降序// multiset<int,greater<int> > mst;// mst.insert(10);// mst.insert(20);// mst.insert(30);// mst.insert(10);//// for (multiset<int>::iterator it = mst.begin() ; it != mst.end() ; it++){// __android_log_print(ANDROID_LOG_INFO,"main","值: %d",*it);// } //自定义排序方式 multiset<Student,Soft> mst; mst.insert(Student("小宇",50)); mst.insert(Student("梦想",59)); mst.insert(Student("song",55)); mst.insert(Student("远方",58)); mst.insert(Student("石桥中化妖",40)); mst.insert(Student("Dream",40)); for (multiset<Student>::iterator it = mst.begin() ; it != mst.end() ; it++){ Student stu = const_cast<Student&>(*it); stu.printStudent(); }}//12.C++语言:map-基本使用#include <map>#include <string>JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMap (JNIEnv *, jobject){ map<int,string> mp; //方式一:插入数据pair mp.insert(pair<int,string>(01,"陈国军")); mp.insert(pair<int,string>(02,"Mr.Sunday")); mp.insert(pair<int,string>(03,"Studio")); mp.insert(pair<int,string>(04,"余祚宁")); //方式二:如果key存在,那么就不添加同时不覆盖,如果不存在,就添加 pair<map<int,string>::iterator, bool> result = mp.insert(map<int,string>::value_type(04,"相约98")); if(result.second){ __android_log_print(ANDROID_LOG_INFO,"main","添加成功!"); }else{ __android_log_print(ANDROID_LOG_INFO,"main","已存在,添加失败!"); } //方式三: mp.insert(make_pair(05,"定定")); //方式四:如果key存在,重复添加会覆盖,如果不存在,那就直接添加 mp[5] = "石桥中化妖"; mp[6] = "定定"; for (map<int,string>::iterator it = mp.begin() ; it != mp.end() ; it++){ //获取key:it->first __android_log_print(ANDROID_LOG_INFO,"main","key: %d",it->first); //获取value:it->second __android_log_print(ANDROID_LOG_INFO,"main","value: %s",it->second.c_str()); }}//13.C++语言:map-删除JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMapDelete (JNIEnv *, jobject){ map<int,string> mp; mp.insert(pair<int,string>(01,"陈国军")); mp.insert(pair<int,string>(02,"Mr.Sunday")); mp.insert(pair<int,string>(03,"Studio")); mp.insert(pair<int,string>(04,"余祚宁")); //删除 map<int,string>::iterator it = mp.begin(); mp.erase(it); //打印 for (map<int,string>::iterator it = mp.begin() ; it != mp.end() ; it++){ //获取key:it->first __android_log_print(ANDROID_LOG_INFO,"main","key: %d",it->first); //获取value:it->second __android_log_print(ANDROID_LOG_INFO,"main","value: %s",it->second.c_str()); }}//14.C++语言:map-查找(equal_range)JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMapFind (JNIEnv *, jobject){ map<int,string> mp; mp.insert(pair<int,string>(01,"陈国军")); mp.insert(pair<int,string>(02,"Mr.Sunday")); mp.insert(pair<int,string>(03,"Studio")); mp.insert(pair<int,string>(04,"余祚宁")); //获取大于或者等于2的元素 pair<map<int,string>::iterator,map<int,string>::iterator> p = mp.equal_range(2); //判断是否存在元素 if(p.first != mp.end()){ //等于2 //获取key:it->first __android_log_print(ANDROID_LOG_INFO,"main","key: %d",p.first->first); //获取value:it->second __android_log_print(ANDROID_LOG_INFO,"main","value: %s",p.first->second.c_str()); //大于2元素 //获取key:it->first __android_log_print(ANDROID_LOG_INFO,"main","key: %d",p.second->first); //获取value:it->second __android_log_print(ANDROID_LOG_INFO,"main","value: %s",p.second->second.c_str()); }}//15.C++语言:multimap-一对多//需求:一个用户对应多个订单class Order{private: char* name; int num;public: Order(char* name,int num){ this->name = name; this->num = num; } void printOrder(){ __android_log_print(ANDROID_LOG_INFO,"main","订单名称:%s, 订单号:%d",this->name,this->num); }};JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMultiMap (JNIEnv *, jobject){ multimap<string,Order> mst; mst.insert(make_pair("陈国军",Order("男士外套",01))); mst.insert(make_pair("陈国军",Order("户外跑鞋",02))); mst.insert(make_pair("梦想",Order("女士外套",03))); mst.insert(make_pair("梦想",Order("女士高跟鞋",02))); mst.insert(make_pair("Dream",Order("女士纱衣",03))); mst.insert(make_pair("Dream",Order("女士布鞋",02))); mst.insert(make_pair("Dream",Order("女士外套",02))); mst.insert(make_pair("Dream",Order("女士裤子",02))); //遍历// for (multimap<string,Order>::iterator it = mst.begin() ; it != mst.end() ; it++){// //获取key:it->first// __android_log_print(ANDROID_LOG_INFO,"main","key: %s",it->first.c_str());// //获取value:it->second// Order order = const_cast<Order&>(it->second);// order.printOrder();// } //需求:只获取"梦想"订单 //获取订单的数量 int count = mst.count("梦想"); //打印"梦想"订单:找到 multimap<string,Order>::iterator it = mst.find("梦想"); //循环遍历打印 //计数 int i = 0; while (it != mst.end() && i < count){ __android_log_print(ANDROID_LOG_INFO,"main","key: %s",it->first.c_str()); Order order = const_cast<Order&>(it->second); order.printOrder(); i++; it++; }}//16.C++语言:vector-浅拷贝和深拷贝class User{private: char* name; int age;public: //浅拷贝(默认就是浅拷贝) User(char* name,int age){ //动态分配内存 this->name = new char[strlen(name)+1]; strcpy(this->name,name); this->age = age; } ~User(){ if(this->name != NULL){ delete[] this->name; this->name = NULL; this->age = 0; } } void printUser(){ __android_log_print(ANDROID_LOG_INFO,"main","名称:%s, 年龄: %d",this->name,this->age); } //深拷贝 User(const User &user){ //先释放内存 if(this->name != NULL){ delete[] this->name; this->name = NULL; this->age = 0; } //动态分配内存 this->name = new char[strlen(user.name)+1]; strcpy(this->name,user.name); this->age = user.age; } User& operator=(User &user){ if(this->name != NULL){ delete[] this->name; this->name = NULL; this->age = 0; } //动态分配内存 this->name = new char[strlen(user.name)+1]; strcpy(this->name,user.name); this->age = user.age; return *this; }};//class User{//private:// string* name;// int age;//public:// //浅拷贝(默认就是浅拷贝)// User(string name,int age){// //动态分配内存// this->name = new string(const_cast<string&>(name));// this->age = age;// }// ~User(){// if(this->name != NULL){// delete this->name;// this->name = NULL;// this->age = 0;// }// }// void printUser(){// __android_log_print(ANDROID_LOG_INFO,"main","名称:%s, 年龄: %d",this->name,this->age);// }//// //深拷贝// User(const User &user){// //先释放内存// if(this->name != NULL){// delete this->name;// this->name = NULL;// this->age = 0;// }// //动态分配内存// this->name = new string(const_cast<string&>(user.name));// this->age = age;// }//// User& operator=(User &user){// if(this->name != NULL){// delete this->name;// this->name = NULL;// this->age = 0;// }// //动态分配内存// this->name = new string(const_cast<string&>(user.name));// this->age = age;// return *this;// }//////};JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppVectorCopy (JNIEnv *, jobject){ vector<User> vt; User user("石桥中化妖",18); //实参作为形参,需要调用拷贝函数,然后默认是浅拷贝 vt.push_back(user); //解决方案:深拷贝 for (vector<User>::iterator it = vt.begin() ; it != vt.end() ; it++){ User order = const_cast<User&>(*it); order.printUser(); } //作业:string如何深拷贝(稍微麻烦一点)}
摘自示例代码
0 0
- NDK-CPP语言-queue队列+stack栈+list+set+map
- List,Map,Stack,Queue,Set的遍历
- STL 整理map、set、vector、list、stack、queue、deque、priority_queue
- Map、Set、List、Queue、Stack的特点与用法1
- Map、Set、List、Queue、Stack的特点与用法2
- Map、Set、List、Queue、Stack的特点与用法1
- Map、Set、List、Collection、Queue、Stack的特点与用法。
- STL详解(vector,list,deque,stack,queue,priority_queue;map,set)
- map、set、vector、list、stack、queue、deque、priority_queue
- Map、Set、List、Queue、Stack的特点与用法
- Java:常用集合类(List、Map、Set、Queue、Stack)
- Map、Set、List、Queue、Stack的特点与用法1
- JAVA Map、Set、List、Queue、Stack的特点与用法
- java 集合(set、list、map、stack、queue)的用法
- Map、Set、List、Queue、Stack的特点与用法
- Map、Set、List、Queue、Stack的特点与用法
- 【Java基础】 (List、Set、Map、Stack、Queue)总结
- Map、Set、List、Queue、Stack的特点与用法。
- HTTP缓存
- 图像的载入、显示和输出示例
- 关于Template
- mysql-5.7.16-winx64.zip安装教程
- 整型和字符串判断
- NDK-CPP语言-queue队列+stack栈+list+set+map
- C/C++中读取文件判断是否读取结束
- Java单例模式 完整版
- 设计模式--备忘录模式
- Maven学习:Eclipse使用maven构建web项目
- 在Visual Studio 2008补全代码功能
- spring+quartz实现定时任务
- JQuery简介
- 非阻塞式connect的Windows实现