C++中STL学习(一)——向量、栈、堆、集合
#include “bits/stdc++.h”
using namespace std;
int main() {
// -------------------- 1、向量vector:可以替换数组,不需要事先指定长度
// -------------------------
vector arr; // 构建int数组
vector arr1(100); // 构建初始长度100的int向量
vector arr2(100, 1); // 构建初始长度100,初始值1的int向量
vector<vector> mat(100, vector());
vector<vector> mat2(100, vector(100, -1));
arr.push_back(2); // 尾插
arr.pop_back(); // 尾删
arr.front(); // 获取首部
arr.back(); // 获取尾部
arr.size(); // 获取长度
arr.empty(); // 判空:1为空,0为不空
arr.clear(); // 清空
arr.resize(6); // 改变长度:如果缩短,删除多余的值,如果扩大,可以指定默认值
vector v1 = {1, 2, 3};
arr.assign(v1.begin(), v1.end()); // 替换
// ----------------------- 2、栈stack:不能访问内部元素
// ----------------------------------
stack stk; // 构造
stk.push(1); // 入栈
stk.pop(); // 出栈
stk.top(); // 取栈顶
stk.size(); // 获取长度
stk.empty(); // 判空
// ----------------------- 3、队列queue:不能访问内部元素
// ---------------------------------
queue que; // 构造
que.push(1); // 进队
que.pop(); // 出队
que.front();
que.back();
que.size();
que.empty();
// 4、优先队列(堆)priority_queue:维护元素的有序性,可以取出最大、最小的元素
// ----------------------
priority_queue pque1; // 储存int的大顶堆
priority_queue<int, vector, greater> pque2; // 储存int的小顶堆
pque2.push(1); // 进堆
pque2.pop(); // 出堆
pque2.top(); // 取堆顶
// ------------------ 5、集合set:确定性、互异性(去重)、有序性(排序)
// ------------------------
set st; // 构造
st.insert(3); // 插入元素
st.insert(1);
st.insert(2);
st.erase(2); // 删除元素
auto it = st.find(2); // 查找元素是否存在,不能使用去找索引
if (it != st.end()) {
cout << “yes” << endl;
}
// ------------------
// 6、映射map:互异性、有序性、输入若干字符串,统计每种字符串的出现次数------------------------
map<int, int> mp; // int -> int (键从小到大)
map<int, int, greater> mp2; // int -> int (键从大到小)
mp[1] = 2; // 增、改、查
mp.erase(1); // 删
if (mp.find(1) != mp.end()) {
cout << “yes” << endl;
}
// -------------7. 字符串string---------------------------
string s; // 构造字符串,为空
string s2 = “awa!”; // 构造字符串,并赋值awa!
string s3(10, ‘6’); // 构造字符串,通过构造函数构造为6666666666
if (s == s2) // 判同
{
cout << “yes” << endl;
}
s = s2 + s3; // 字符串连接
s += “aaa”; // 尾接字符串
string sub = s.substr(5, 3); // .substr(起始下标, 子串长度)
s = “12345678”;
if (s.find(“3465”) != string::npos) // 查找字符串
{
cout << “yes” << endl;
}
// to_string() stoi() stof() stod() // 数值与字符串互转
// -----------8.二元组:pair-----------------
pair<int, char> p = {1, ‘a’};
;
pair<int, long long> p22;
pair<char, int> p3;
cout << p.first << ’ ’ << p.second << endl; // 取值
pair<int, int> p1 = {1, 2};
pair<int, int> p2 = {1, 3};
if (p1 == p2) { // 判同
} // false
return 0;
}