STL-vector(ACM)
1.长度可变的数组
2.这里不是很懂,v.size() 代码源里说这个v.size()是无符号类型的,使用时要说明类型,
但是我在使用时并没有出现warning,有大佬知道原因吗?
3.vector是有v.clear()的
4.vector按字典序比较
重构函数(默认)
vector<int> v; vector<int> v(3, 100); // 大小为3,每个数都是100 //下方为{}操作 C++11 可以用的 vector<int> v{1, 2, 3, 4}; // 把1,2,3,4塞进v里面,大小为4,元素1-4
基础操作
v.size(); // unsigned类型 v.resize(); v.empty(); v.clear(); // 只能清空表面 // 只有这两个操作 v.push_back(); v.pop_back(); // 下面两个是地址 v.begin(); // 指第一个元素的位置 v.end();// 指最后一个元素的地址+1的地址 // 例如 // 1 2 3 4 5 6 7 8 // ^ ^ // | | // v.begin() v.end() v.insert(地址,元素) // 地址前一个插入元素 // 下方操作会在3423后面和53之间插入7 vector<int> v{1, 2, 3423, 53, 542}; v.insert(v.begin() + 3, 7); // 括号里第一个是地址,第二个是要插入的元素 // 操作时间是O(n)的 v.erase(地址,元素); // 删去对应的元素 sort(v.begin(), v.end()); // 排序 lower_bound(v.begin(), v.end(), 100); auto it = lower_bound(v.begin(), v.end(), 100); // 返回前闭后开地址区间内 >= 100 的第一个元素的迭代器 // 这个查找必须在有序列里面,查询方式是二分,时间复杂度O(logn) upper_bound(v.begin(), v.end(), 100) auto it = upper_bound(v.begin(), v.end(), 100); // 返回前闭后开地址区间内 > 100 的第一个元素的迭代器 // 这个查找必须在有序列里面,查询方式是二分,时间复杂度O(logn)
迭代器
// 迭代器(可以暂时理解为STL的指针) vector<int>::iterator it = v.begin(); // 初始化 // 迭代器遍历模板(auto C++11后可用,自动判断后面的类型) for (auto it = v.begin(); it != v.end(); it ++) { cout << *it << endl; }
遍历新语法(C++11之后可以使用)
for (int x : v) { cout << x << endl; } // 遍历每一个元素,每一次x作为每个元素,int 可改为 auto等 // 普通数组、STL数组、vector 都可使用 // 不会改变原来的值 for (int x : v) { x += 1; } // 改变的只是每次x的值,v中的每个元素都不会改变 // 像下边这样 for (int i = 0; i < v.size(); i ++) { int x = v[i]; x += 1; cout << v[i] << endl; } 但是加上 & 就能 改 for (int &x : v) { x += 1; } // 加了是下边的效果 for (int i = 0; i < v.size(); i ++) { int &x = v[i]; x += 1; cout << v[i] << endl; }
存图(以后回来看)
for (int i = 1; i <= m; i ++) { int u, v; scanf("%d%d", &u, &v); g[u].push_back(v); g[v].push_back(u); } for (auto v : g[u]) { }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律