本文写一写 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 啦。