這篇文章主要為大家展示了“NDK數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與棧等的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“NDK數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與棧等的示例分析”這篇文章吧。
做網(wǎng)站、成都網(wǎng)站制作的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶(hù)友好,注重用戶(hù)體驗(yàn),一切以用戶(hù)為中心。
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 __cplusplus extern "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++語(yǔ)言:queue隊(duì)列-基本使用 #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++語(yǔ)言:queue隊(duì)列-優(yōu)先級(jí) JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppQueuePriority (JNIEnv *, jobject){ //2.1 添加元素(默認(rèn)是按照添加的順序排列) // 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 最大值優(yōu)先級(jí)隊(duì)列(從大到小排列) // 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 最小值優(yōu)先級(jí)隊(duì)列 //注意:不同額編譯器對(duì)語(yǔ)法檢查有差別 //在A(yíng)S中進(jìn)行NDK開(kāi)發(fā)>>符號(hào)認(rèn)為運(yùn)算符,所以為了避免出現(xiàn)這樣的情況,請(qǐng)用空格分離'> >' 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++語(yǔ)言: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++語(yǔ)言: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); //循環(huán)遍歷 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(); //連續(xù)相加允許(++) //支持'++'、'--'運(yùn)算符 it++; it--; //注意:不支持間斷 //不支持'+'、'-'運(yùn)算度 // it = it - 1; } //5.C++語(yǔ)言: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++; // //刪除:刪除第二個(gè)元素 // lt.erase(it); //方式二 //刪除第二個(gè)元素(直接根據(jù)內(nèi)容刪除) // lt.remove(20); //方式三:區(qū)間刪除 //開(kāi)始位置 list<int>::iterator it_begin = lt.begin(); //結(jié)束位置 list<int>::iterator it_end = lt.begin(); it_end++; it_end++; //刪除元素(如果已經(jīng)被刪除的元素不能夠在刪除) lt.erase(it_begin,it_end); //循環(huán)遍歷 for (list<int>::iterator it = lt.begin() ; it != lt.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); } } //6.C++語(yǔ)言: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); //循環(huán)遍歷 for (list<int>::iterator it = lt.begin() ; it != lt.end() ; it++){ __android_log_print(ANDROID_LOG_INFO,"main","值:%d",*it); } } //7.C++語(yǔ)言:set-基本使用(元素唯一)-默認(rèn)從小到大排列 //特點(diǎn)一:元素唯一 //特點(diǎn)二:默認(rèn)從小到大排列 #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++語(yǔ)言: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++語(yǔ)言:set-自定義排序規(guī)則 //需求:根據(jù)學(xué)生的成績(jī)進(jìn)行排序 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, 成績(jī): %d",this->name,this->score); } }; //仿函數(shù) struct Soft{ //方式一:不寫(xiě)常量 // bool operator()(Student &left,Student &right){ // return left.getScore() < right.getScore(); // } //方式二:const修飾 bool operator()(const Student &left,const Student &right){ //類(lèi)型轉(zhuǎn)換 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("夢(mèng)想",59)); st.insert(Student("song",55)); st.insert(Student("遠(yuǎn)方",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++語(yǔ)言: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,那么就返回當(dāng)前值30(例如:30) //如果不存在你查找的值31,那么返回大于31的最近的一個(gè)元素指針 set<int>::iterator it_lower = st.lower_bound(31); __android_log_print(ANDROID_LOG_INFO,"main","查找結(jié)果: %d",*it_lower); //如果存在你查找的值30,那么就返回大于30最近的一個(gè)元素指針40 //如果不存在你查找的值31,那么就返回大于31最近的一個(gè)元素的指針40 set<int>::iterator it_upper = st.upper_bound(31); __android_log_print(ANDROID_LOG_INFO,"main","查找結(jié)果: %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++語(yǔ)言:multiset-基本使用 //允許存儲(chǔ)重復(fù)元素 //默認(rèn)升序排列 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("夢(mèng)想",59)); mst.insert(Student("song",55)); mst.insert(Student("遠(yuǎn)方",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++語(yǔ)言:map-基本使用 #include <map> #include <string> JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMap (JNIEnv *, jobject){ map<int,string> mp; //方式一:插入數(shù)據(jù)pair mp.insert(pair<int,string>(01,"陳國(guó)軍")); mp.insert(pair<int,string>(02,"Mr.Sunday")); mp.insert(pair<int,string>(03,"Studio")); mp.insert(pair<int,string>(04,"余祚寧")); //方式二:如果key存在,那么就不添加同時(shí)不覆蓋,如果不存在,就添加 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存在,重復(fù)添加會(huì)覆蓋,如果不存在,那就直接添加 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++語(yǔ)言:map-刪除 JNIEXPORT void JNICALL Java_com_tz_ndk_cpp_NDKCpp_callCppMapDelete (JNIEnv *, jobject){ map<int,string> mp; mp.insert(pair<int,string>(01,"陳國(guó)軍")); 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++語(yǔ)言: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,"陳國(guó)軍")); 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++語(yǔ)言:multimap-一對(duì)多 //需求:一個(gè)用戶(hù)對(duì)應(yīng)多個(gè)訂單 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","訂單名稱(chēng):%s, 訂單號(hào):%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("陳國(guó)軍",Order("男士外套",01))); mst.insert(make_pair("陳國(guó)軍",Order("戶(hù)外跑鞋",02))); mst.insert(make_pair("夢(mèng)想",Order("女士外套",03))); mst.insert(make_pair("夢(mèng)想",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(); // } //需求:只獲取"夢(mèng)想"訂單 //獲取訂單的數(shù)量 int count = mst.count("夢(mèng)想"); //打印"夢(mèng)想"訂單:找到 multimap<string,Order>::iterator it = mst.find("夢(mèng)想"); //循環(huán)遍歷打印 //計(jì)數(shù) 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++語(yǔ)言:vector-淺拷貝和深拷貝 class User{ private: char* name; int age; public: //淺拷貝(默認(rèn)就是淺拷貝) User(char* name,int age){ //動(dòng)態(tài)分配內(nèi)存 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","名稱(chēng):%s, 年齡: %d",this->name,this->age); } //深拷貝 User(const User &user){ //先釋放內(nèi)存 if(this->name != NULL){ delete[] this->name; this->name = NULL; this->age = 0; } //動(dòng)態(tài)分配內(nèi)存 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; } //動(dòng)態(tài)分配內(nèi)存 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: // //淺拷貝(默認(rèn)就是淺拷貝) // User(string name,int age){ // //動(dòng)態(tài)分配內(nèi)存 // 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","名稱(chēng):%s, 年齡: %d",this->name,this->age); // } // // //深拷貝 // User(const User &user){ // //先釋放內(nèi)存 // if(this->name != NULL){ // delete this->name; // this->name = NULL; // this->age = 0; // } // //動(dòng)態(tài)分配內(nèi)存 // 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; // } // //動(dòng)態(tài)分配內(nèi)存 // 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); //實(shí)參作為形參,需要調(diào)用拷貝函數(shù),然后默認(rèn)是淺拷貝 vt.push_back(user); //解決方案:深拷貝 for (vector<User>::iterator it = vt.begin() ; it != vt.end() ; it++){ User order = const_cast<User&>(*it); order.printUser(); } }
以上是“NDK數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與棧等的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)名稱(chēng):NDK數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與棧等的示例分析
網(wǎng)頁(yè)網(wǎng)址:http://vcdvsql.cn/article20/gdeijo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站營(yíng)銷(xiāo)、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)