C++ STL入门
STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
从根本上说,STL 是一些容器、算法和其他一些组件的集合,所有容器和算法都是总结了几十年来算法和数据结构的研究成果,汇集了许多计算机专家学者经验的基础上实现的,因此可以说,STL 基本上达到了各种存储方法和相关算法的高度优化
1. STL定义可变数组(使用向量模板类 vector 实现)
/// 使用vector创建动态数组
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> a; // 定义方法
// 0. 动态添加10个元素
for (int i = 0; i < 10; i++) {
a.push_back(i);
}
cout << "0: " << a.size() << endl;
// 1. 重置数组的大小为100,使用索引的方式赋值
a.resize(100);
a[90] = 100;
cout << "1: " << a.size() << endl;
// 2. 清除数组中的所有元素, size=0
a.clear();
cout << "2: " << a.size() << endl;
// 3. 重置数组的大小, 并使用新值填充数组
a.resize(20, 50);
cout << "3: " << a.size() << endl;
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
if ((i + 1) % 10 == 0) {
cout << endl;
}
}
return 0;
}
2. STL迭代器(iterator)用法
/// 正向迭代器遍历vector容器
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{ 1,2,3,4,5,6,7,8,9,10 }; // 初始化成有10个元素
cout << "通用索引遍历方法(size=" << v.size() << "):" << endl;
for (int i = 0; i < v.size(); ++i) {
cout << v[i] << " "; // 像普通数组一样使用vector容器
}
cout << endl;
// 正向迭代器: iterator
// 常量正向迭代器: const_iterator
// 反向迭代器: reverse_iterator
// 常量反向迭代器: const_reverse_iterator
// 创建一个正向迭代器,vector也支持其他3种定义迭代器的方式
vector<int>::iterator i;
cout << "迭代器遍历方法(!=v.end()):" << endl;
for (i = v.begin(); i != v.end(); ++i) { // v.end()结束, 用不等于判断
cout << *i << " ";
}
cout << endl;
cout << "迭代器遍历方法(<v.end()):" << endl;
for (i = v.begin(); i < v.end(); ++i) { // v.end()结束, 用小于判断
cout << *i << " ";
}
cout << endl;
// 也可以使用while, 和for一样
// ...
}
3. Array容器
/// array容器
#include <iostream>
#include <array>
using namespace std;
int main()
{
// 定义并初始化
array<int, 4> values{};
for (int i = 0; i < values.size(); i++) {
values.at(i) = i;
}
// 可以使用get()重载函数读取指定位置元素
cout << get<3>(values) << endl;
// 如果容器不为空,则输出容器中所有的元素
if (!values.empty()) {
// auto关键字会自动判断变量的类型
for (auto val = values.begin(); val < values.end(); val++) {
cout << *val << " ";
}
}
cout << endl;
}
博客园:http://www.cnblogs.com/linux-farmer/

浙公网安备 33010602011771号