C++ STL(Standard Template Library标准模板库),相当于java的集合模块, STL 有很多的容器。
#include
#include // 引入 vector 容器的支持
// NDK 开发 一定要用容器 应该 queue 队列
using namespace std;
int main() {
vector vector1;
vector vector2(10); // 指定10的空间大小
vector vector3(10, 0); // 有了10个值了 每个值都是0
vector vector4;
// 插入数据
vector4.insert(vector4.begin(), 40);
vector4.insert(vector4.begin(), 60);
vector4.insert(vector4.begin(), 80);
// 第一个
cout << " 修改前:vector4.front():" << vector4.front() << endl;
vector4.front() = 99; // 默认修改第一个
cout << " 修改后:vector4.front():" << vector4.front() << endl;
// 最后一个
cout << " 修改前:vector4.back():" << vector4.back() << endl;
vector4.back() = 777; // 默认修改最后
cout << " 修改后:vector4.back():" << vector4.back() << endl;
vector4.erase(vector4.begin()); // 移除第一个元素(内部:通过迭代器的位置 进行移除) 删除
// 循环打印,默认 从大到小输出
for (int i = 0; i < vector4.size(); ++i) {
cout << "item:" << vector4[i] << endl;
}
// 迭代器 循环遍历
// auto Kotlin自带类型推到
// for (vector::iterator iteratorVar = vector4.begin(); iteratorVar != vector4.end(); iteratorVar++) {
for (auto iteratorVar = vector4.begin(); iteratorVar != vector4.end(); iteratorVar++) {
// 迭代器 当中指针操作 iteratorVar++
cout << "迭代器:" << *iteratorVar << endl;
}
cout << "" << endl;
return 0;
}
#include
using namespace std;
int main() {
stack stackVar;
stackVar.push(30);
stackVar.push(60);
stackVar.push(90);
while (!stackVar.empty()) {
int top = stackVar.top(); // top == 获取栈顶的元素
cout << "获取栈顶的元素:" << top << endl; // 永远拿 90
stackVar.pop(); // 把栈顶的元素 弹出去 【删除】
}
return 0;
}
栈没有迭代器,不能指定位置压栈等
#include
using namespace std;
int main() {
queue queueVar;
queueVar.push(20);
queueVar.push(40);
queueVar.push(60);
// 第一个元素
cout << " 修改前: queueVar.front():" << queueVar.front() << endl;
queueVar.front() = 88;
cout << " 修改后: queueVar.front():" << queueVar.front() << endl;
// 最后一个
cout << " 修改前: queueVar.back():" << queueVar.back() << endl;
queueVar.back() =99;
cout << " 修改后: queueVar.back():" << queueVar.back() << endl;
while (!queueVar.empty()) {
cout << "while1:" << queueVar.front() << endl;
queueVar.pop(); // 把前面的元素 给消费掉 【删除】
}
return 0;
}
queue队列内部是通过数组和链表实现的,这个数据结构应用场景比较多,音视频编解码啥的都会用到,遵守FIFO 原则。
#include
#include
using namespace std;
int main() {
// priority_queue priorityQueue;
priority_queue, less> priorityQueue;
priorityQueue.push(10);
priorityQueue.push(20);
priorityQueue.push(30);
priorityQueue.push(100);
priorityQueue.push(50);
priorityQueue.push(60);
cout << priorityQueue.top() << endl; // 60
// 循环代码
while (!priorityQueue.empty()) {
cout << "while1:" << priorityQueue.top() << endl;
priorityQueue.pop(); // 最前面的元素消费掉
}
return 0;
}
#include
#include
using namespace std;
int main() {
list listVar;
// 插入操作
listVar.push_front("唐三"); // 插入到前面 明确
listVar.push_back("小舞"); // 插入到后面
listVar.insert(listVar.begin(),"宁荣荣"); // 插入到前面 灵活
listVar.insert(listVar.end(), "马红俊"); // 插入到后面
// // 修改操作
// listVar.back() = 88;
// listVar.front() = 55;
// // 删除
// listVar.erase(listVar.begin()); // 删除最前面的 55
// listVar.erase(listVar.end()); // 删除最后面的 88
for (auto it = listVar.begin(); it != listVar.end() ; it ++) {
cout << *it << endl;
}
return 0;
}
#include
#include
using namespace std;
int main() {
set> setVar;
setVar.insert(1);
setVar.insert(3);
setVar.insert(2);
setVar.insert(4);
pair>::iterator, bool> res = setVar.insert(4);
bool insert_success = res.second;
if (insert_success) {
cout << "插入成功" << endl;
} else {
cout << "插入失败" << endl;
}
for (auto it = setVar.begin(); it != setVar.end() ; it ++) {
cout << *it << endl;
}
return 0;
}
#include
#include #include
#include
using namespace std;
int main() {
multimap multimapVar;
multimapVar.insert(make_pair(10, "十个1"));
multimapVar.insert(make_pair(10, "十个2"));
multimapVar.insert(make_pair(10, "十个3"));
multimapVar.insert(make_pair(30, "三十1"));
multimapVar.insert(make_pair(30, "三十3"));
multimapVar.insert(make_pair(30, "三十2"));
multimapVar.insert(make_pair(20, "二十1"));
multimapVar.insert(make_pair(20, "二十2"));
multimapVar.insert(make_pair(20, "二十3"));
for (auto iteratorVar = multimapVar.begin(); iteratorVar != multimapVar.end() ; iteratorVar ++) {
cout << iteratorVar->first << "," << iteratorVar->second << endl;
}
cout << endl;
int result;
cout << "请输入你要查询的key,为int类型:" << endl;
cin >> result;
multimap::iterator iteratorVar = multimapVar.find(result);
while (iteratorVar != multimapVar.end()) {
cout << iteratorVar->first << "," << iteratorVar->second << endl;
iteratorVar++;
if (iteratorVar->first != result) {
break;;
}
// if (iteratorVar == multimapVar.end()) {
// break;
// }
}
return 0;
}
c++ 谓词 概念: 返回bool类型的仿函数称为谓词 。
如果operator()接受一个参数,那么叫做一元谓词 如果operator()接受两个参数,那么叫做二元谓词。
#include
#include
using namespace std;
class Person {
public:
string name;
int id;
Person(string name, int id) : name(name), id(id) {}
};
// 自定义谓词 (仿函数)
struct doCompareAction2 {
public:
bool operator() (const Person& __x, const Person& __y) {
return __x.id < __y.id;
}
};
struct doCompareAction3 {
public:
bool operator() (const Person& __x, const Person& __y) {
return __x.id > __y.id;
}
};
int main() {
set setVar;
// set setVar;
// 构建对象
Person p1 ("Snake", 1);
Person p2 ("kevin", 2);
Person p3 ("Derry", 3);
// 把构建的对象 插入到 set 容器里面去
setVar.insert(p1);
setVar.insert(p2);
setVar.insert(p3);
for (set::iterator it = setVar.begin(); it != setVar.end() ; it ++) {
cout << it->name.c_str() << " , " << it->id << endl;
}
return 0;
}
// C++ 预定义函数(C++ 内置函数)
#include
using namespace std;
int main() {
// "Derry" + "AAAA" // 运算符重载
// C++已经提供了 预定义函数 plus,minus,multiplies,divides,modulus ...
plus add_func;
int r = add_func(1, 1);
cout << r << endl;
plus add_func2;
string r2 = add_func2("AAAA", "BBB");
cout << r2 << endl;
plus add_func3;
float r3 = add_func3(4354.45f, 34.3f);
cout << r3 << endl;
return 0;
}