這篇文章主要為大家展示了“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)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
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
#endifcom_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ǔ)法檢查有差別
//在AS中進(jìn)行NDK開發(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ū)間刪除
//開始位置
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{
//方式一:不寫常量
// bool operator()(Student &left,Student &right){
// return left.getScore() < right.getScore();
// }
//方式二:const修飾
bool operator()(const Student &left,const Student &right){
//類型轉(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è)用戶對(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","訂單名稱:%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("戶外跑鞋",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","名稱:%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","名稱:%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è)名稱:NDK數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與棧等的示例分析
網(wǎng)頁(yè)網(wǎng)址:http://chinadenli.net/article20/gdeijo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、營(yíng)銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站營(yíng)銷、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)