C++必不可少环节之STL,本篇作为系统性学习笔记,详细教程可访问http://c.biancheng.net/stl/
容器
array<T , N>
包含N个T的固定序列,相当于标准数组。
容器创建:std::array<int, 5> data {1, 2, 3, 4, 5};
元素访问:①索引值 data[i] ②成员函数 data.at(i) 第二种可以检查索引值是否越界,越界会抛出异常,但检查越界存在性能开销
首元素:①std::begin(data) ②data.front() 引用类型
末元素:①std::end(date) ②data.back() 引用类型
元素个数:data.size()
容器遍历:for ( auto&& value : data )
vector<T>
包含T的非固定序列,容器大小可调节,只可添加删除未元素。
容器创建:std::vector<int> data(n , i) 添加 n 个元素并设定初始值为 i
元素访问:data[i]
首末元素:同array
申请内存:data.reserve(i) 内存分配 i 个元素容量,若当前容量>= i , 当作啥也没发生,reserve不影响现有元素
元素个数:data.size()
当前容量:data.capacity() 元素个数<容量 元素个数爆满时,容器根据不同算法会进行自动扩容
容量调整:data.resize(n, i) 可用于扩充,也可裁切,扩充时 i 作为新增元素默认值
容器遍历:for(iter = data.begin() ; iter != data.end() ; iter++) cout<<*iter
添加元素:①data.push_back(i) ②data.emplace_back(i) 第二种会使用它的参数作为构造函数的参数
插入元素:①data.inset(std::end(data) , i) ②data.emplace(++std::begin(data) , i)
插入示例:
std::vector<std::string> words {"first" , "second"};
auto iter = words.emplace(++std::begin(words), 5, 'A');
words.emplace(++iter, "BBB");
//输出结果 "first" "AAAAA" "BBB" "second"
删除元素:①data.clear()删除所有元素 ②data.pop_back()删除末元素 ③data.erase(std::begin(data)+1) , std::begin(data)+3)删 除指定范围元素
deque<T>
以双端队列形式组织元素,相较于vector,可高效在首尾增删元素,且元素个数等于容量。
容器创建:std::deque<int> data
元素访问:①索引值 data[i] ②成员函数 data.at(i)
添加元素:见示例
std::deque<int> numbers {2, 3, 4};
numbers.push_front(11); // 11 2 3 4
numbers.push_back(12); // 11 2 3 4 12
numbers.pop_front(); // 2 3 4 12
修改元素:
list<T>
map
set
未完待续...