C++ STL 个人使用总结

1. vector


vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。
vector 为变长数组,体现倍增思想,储存在#include 中,且支持随机访问
vector 擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)


  • size( ):返回容器内元素的个数
  • empty( ):返回容器是否为空,若容器内为空,则返回true;若容器内不为空,即存在元素,则返回false
  • clear( ):清空容器内的所有元素
  • begin( ):返回指向容器中第一个元素的迭代器
  • end( ):返回指向容器最后一个元素所在位置后一个位置的迭代器
  • rbegin( ):返回指向最后一个元素的迭代器
  • rend( ):返回指向第一个元素所在位置前一个位置的迭代器
  • back( ):返回最后一个元素的值
  • push_back( ):在序列的尾部添加一个元素
  • pop_back( ):在序列的尾部删除一个元素
  • insert( ):在指定的位置插入一个或多个元素 (这里的位置指的是某个位置的迭代器,如 a.begin()+2 等 )
  • erase( ):移出一个元素或一段元素 (一段元素的区域为左闭右开,且位置同样为迭代器)

C++ STL 个人使用总结




可以创建一个vector容器:vector<int> name/vector<double> name, <>中标出vector容器的类型


可以在创建的同时指定初始值以及元素个数:vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19};


也可以指定元素个数:vector<double> values(20);,且这二十个元素初始值均为0
注意:圆括号 ( ) 和大括号 { } 是有区别的,前者(例如(20)表示元素的个数,而后者(例如{20})则表示 vector 容器中只有一个元素 20


也可以指定其他元素做初始值:vector<double> values(20, 1.0);,这20个元素初始值均为1.0


值得一提的是,圆括号 ( ) 中的 2 个参数,既可以是常量,也可以用变量来表示:

int num=20;
double value =1.0;
vector<double> values(num, value);

通过存储元素类型相同的其它 vector 容器,也可以创建新的 vector 容器:

vector<int>value1 = {1,2,3,4,5};
vector<int>value2(value1); // value2容器的元素和value1容器的元素相同,都是 1,2,3,4,5

在此基础上,如果不想复制其它容器中所有的元素,可以用一对指针或者迭代器来指定初始值的范围:

vector<int> a = {1,2,3,4,5};
vector<int> b(a.begin(), a.begin()+3); // b容器内的元素为 1,2,3
int c[] = {1,2,3,4,5};
vector<int> d(c, c+3); // d容器内的元素为 1,2,3

特别的,vector不能重复定义同一个容器,否则报错


通过迭代器循环vector容器的方法:

vector<char> value = {'S','T','L'};
for (vector<char>::iterator i = value.begin();i != value.end();i ++)
{
    cout << *i << endl;
}

for循环中的vector::iterator可用auto代替,这是C++11的新标准


另外,vector支持比较运算,比较方式为字典序:

vector<int> a = {3,3};
vector<int> b(4,2); // b = {2,2,2,2}
if (a > b) cout << "a > b"; // 输出 a > b

2.

上一篇:关于 final 和 private


下一篇:JavaScript 的变量 var 预处理 设计失误