【C++】 STL的一些归纳
C++ STL之动态数组vector(⽮量)的使⽤+set的使⽤+映射map的使⽤+栈stack的使⽤+队列queue的使⽤
一、vector使用
之前C语⾔⾥⾯⽤ int arr[] 定义数组,它的缺点是数组的⻓度不能随⼼所欲的改变,⽽C++⾥⾯有⼀能完全替代数组的动态数组 vector它能够在运⾏阶段设置数组的⻓度、在末尾增加新的数据、在中间插⼊新的值、⻓度意被改变,很好⽤~它在头⽂件 vector ⾥⾯,也在命名空间 std ⾥⾯,所以使⽤的时候要引⼊头件 #include 和 using namespace std vector 、 stack 、 queue 、 map 、 set 这些在C++中都叫做容器,这些容器的⼤⼩都可以⽤ .size(获取到,就像 string s 的⻓度⽤ s.length() 获取⼀样~( string 其实也可以⽤ s.size() ,不过对vector 、 stack 、 queue 、 map 、 set 这样的容器我们⼀般讨论它的⼤⼩ size ,字符串⼀般讨它的⻓度 length ~其实 string ⾥⾯的 size 和 length 两者是没有区别、可以互换使⽤的,
#include <vector> using namespace std; int main() { vector<int> v1; // 定义⼀个vector v1,定义的时候没有分配⼤⼩ cout << v1.size(); // 输出vector v1的⼤⼩,此处应该为0 return 0; }
可以⼀开始不定义⼤⼩,之后⽤resize⽅法分配⼤⼩,也可以⼀开始就定义⼤⼩,之后还可对它插⼊删除动态改变它的⼤⼩~⽽且不管在main函数⾥还是在全局中定义,它都能够直接将所的值初始化为0(不⽤显式地写出来,默认就是所有的元素为0),再也不⽤担⼼C语⾔⾥⾯出现的种 int arr[10]; 结果忘记初始化为0导致的各种bug
">// 或者 vector<int> v1; v1.resize(8); //先定义⼀个vector变量v1,然后将⻓度resize为8,默认这8个元素都是0 // 在定义的时候就可以对vector变量进⾏初始化 vector<int> v3(100, 9);// 把100⻓度的数组中所有的值都初始化为9 // 访问的时候像数组⼀样直接⽤[]下标访问即可~(也可以⽤迭代器访问,下⾯会讲~) v[1] = 2; cout << v[0];
#include <vector> using namespace std; int main() { vector<int> a; // 定义的时候不指定vector的⼤⼩ cout << a.size() << endl; // 这个时候size是0 for (int i = 0; i < 10; i++) { a.push_back(i); // 在vector a的末尾添加⼀个元素i } cout << a.size() << endl; // 此时会发现a的size变成了10 vector<int> b(15); // 定义的时候指定vector的⼤⼩,默认b⾥⾯元素都是0 cout << b.size() << endl; for (int i = 0; i < b.size(); i++) { b[i] = 15; } for (int i = 0; i < b.size(); i++) { cout << b[i] << " "; } cout << endl; vector<int> c(20, 2); // 定义的时候指定vector的⼤⼩并把所有的元素赋⼀个指定的值 for (int i = 0; i < c.size(); i++) { cout << c[i] << " "; } cout << endl; for (auto it = c.begin(); it != c.end(); it++) { // 使⽤迭代器的⽅式访问vector cout << *it << " "; } return 0; }
容器 vector 、 set 、 map 这些遍历的时候都是使⽤迭代器访问的, c.begin() 是⼀个指针,指向容的第⼀个元素, c.end() 指向容器的最后⼀个元素的后⼀个位置,所以迭代器指针 it 的for循环判断件是 it != c.end()
二、set的使⽤
#include <set> using namespace std; int main() { set<int> s; // 定义⼀个空集合s s.insert(1); // 向集合s⾥⾯插⼊⼀个1 cout << *(s.begin()) << endl; // 输出集合s的第⼀个元素 (前⾯的星号表示要对指针取值) for (int i = 0; i < 6; i++) { s.insert(i); // 向集合s⾥⾯插⼊i } for (auto it = s.begin(); it != s.end(); it++) { // ⽤迭代器遍历集合s⾥⾯的每⼀ 个元素 cout << *it << " "; } cout << endl << (s.find(2) != s.end()) << endl; // 查找集合s中的值,如果结果等于 s.end()表示未找到 (因为s.end()表示s的最后⼀个元素的下⼀个元素所在的位置) cout << (s.find(10) != s.end()) << endl; // s.find(10) != s.end()表示能找到10 这个元素 s.erase(1); // 删除集合s中的1这个元素 cout << (s.find(1) != s.end()) << endl; // 这时候元素1就应该找不到啦~ return 0; }
三、map
map 是键值对,⽐如⼀个⼈名对应⼀个学号,就可以定义⼀个字符串 string 类型的⼈名为“键”,号 int 类型为“值”,如 map<string, int> m; 当然键、值也可以是其它变量类型~ map 会⾃动将所有键值对按照键从⼩到⼤排序, map 使⽤时的头⽂件 #include 以下是 map 中常⽤的⽅法:
#include <map> #include <string> using namespace std; int main() { map<string, int> m; // 定义⼀个空的map m,键是string类型的,值是int类型的 m["hello"] = 2; // 将key为"hello", value为2的键值对(key-value)存⼊map中 cout << m["hello"] << endl; // 访问map中key为"hello"的value, 如果key不存在,则返 回0 cout << m["world"] << endl; m["world"] = 3; // 将"world"键对应的值修改为3 m[","] = 1; // 设⽴⼀组键值对,键为"," 值为1 // ⽤迭代器遍历,输出map中所有的元素,键⽤it->first获取,值⽤it->second获取 for (auto it = m.begin(); it != m.end(); it++) { cout << it->first << " " << it->second << endl; } // 访问map的第⼀个元素,输出它的键和值 cout << m.begin()->first << " " << m.begin()->second << endl; // 访问map的最后⼀个元素,输出它的键和值 cout << m.rbegin()->first << " " << m.rbegin()->second << endl; // 输出map的元素个数 cout << m.size() << endl; return 0; }
四、栈stack的使⽤
#include <stack> using namespace std; int main() { stack<int> s; // 定义⼀个空栈s for (int i = 0; i < 6; i++) { s.push(i); // 将元素i压⼊栈s中 } cout << s.top() << endl; // 访问s的栈顶元素 cout << s.size() << endl; // 输出s的元素个数 s.pop(); // 移除栈顶元素 return 0; }
五、队列queue的使⽤
#include <queue> using namespace std; int main() { queue<int> q; // 定义⼀个空队列q for (int i = 0; i < 6; i++) { q.push(i); // 将i的值依次压⼊队列q中 } cout << q.front() << " " << q.back() << endl; // 访问队列的队⾸元素和队尾元素 cout << q.size() << endl; // 输出队列的元素个数 q.pop(); // 移除队列的队⾸元素 return 0; }
这个应用在这道题里体现:马的遍历
- 点赞
- 收藏
- 分享
- 文章举报
- C++ STL 中map的一些用法
- C++ 一些STL
- c++ stl容器的一些比较
- C/C++的一些知识点归纳(一)
- [C++]高效定义STL比较函数的一些建议
- [C++ 2011 STL (VS2012 Update4) 源代码阅读系列(2)]熟悉一些宏定义和模版偏特化或叫模版专门化
- C++STL几种常用容器简要归纳
- C++中STL的一些代码
- C++与STL的一些总结
- C++ 学习笔记:STL 容器一些底层机制
- 记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_if)
- C++ STL ; 一些记录。自己学习用。
- C++ STL入门总结及一些忠告
- C++ STL中set的一些用法
- c++ STL的一些用法
- C++ STL容器部分 有关queue 队列模型的 一些基本API函数的使用
- C++ STL的一些实用的东西
- c++ STL 容器一些底层机制
- STL学习笔记(四)——温习一下C++的一些重要概念(上)
- [置顶] 关于C++中STL的一些东西(不定期整理)