C++-STL-Vector and Stack
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。
C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
为方便,以下省略
1 |
|
Vector
初始化
vector有许多初始化方式
1 | vector<int> v1;// 仅声明, 没有分配空间 |
容量和大小
1 | v1.size() // 返回大小 |
访问
1 | cout << v1.front(); |
添加
1 | v1.push_back(3); |
emplace_back比push_back更有效率,如果是push_back(“123”)是构造了一个"123"的字符串然后再移动,而emplace_back()是在尾部直接构造,同时emplace_back()也允许你使用对象,像初始化的emplace一样。
值得注意的是,不能使用非成员函数去添加容器的元素
插入
1 | vector<string> s1 {"first", "second"}; |
如果要在指定位置插入,就用s1.begin()+n
删除
1 | vector<int> v1 {1, 2, 3, 4, 5, 6, 7}; |
接下来看erase-remove操作
1 |
|
遍历
一共有三种遍历方式
1 | vector<int> v1 {1, 2, 3}; |
Stack
top()
:返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。push(const T& obj)
:可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。push(T&& obj)
:以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。pop()
:弹出栈顶元素。不过这个是void类型size()
:返回栈中元素的个数。empty()
:在栈中没有元素的情况下返回 true。emplace()
:用传入的参数调用构造函数,在栈顶生成对象。swap(stack<T> & other_stack)
:将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。
对于emplace()
和swap()
函数举个例子吧
1 | struct node |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 X Mεl0n | 随手记!