本文写一写 vector 冷门但是可能有用的功能。
vector 的构造函数
vector
有一堆构造函数。C++ 98 有如下:
1 | vector (const allocator_type& alloc = allocator_type()); // default (1) |
- default:
vector<int> v;
构造一个空的vector<int>
; - fill:
vector<int> v(3, 1);
构造一个vector<int>
装有 3 个1
; - range:
vector<int> v(s.begin(), s.end())
对 s 进行遍历,并构造一个相同的vector<int>
; - copy:从一个
vector
拷贝构造另一个。
值得一提的是第三个 range
,它能将 set
list
等数据结构转化为 vector
。更有意思的是,set
等模板类也有类似的构造函数,因此二者可以互相转换:
1 |
|
有序 vector 的集合运算
见 set-集合运算。
swap
vector 有一个成员函数叫 swap
。这个 swap
是做什么的?
1 |
|
在 cppreference 上提到,该函数可以和另一个 vector 进行交换,时间复杂度为 $O(1)$。貌似只是换一下指向数组的位置,但是可以用于滚动数组,不用再 %2
和 (cur+1)%2
啦。