赞
踩
说明: reference代指元素的引用,比如 int&。iterator指代迭代器。Args… args是可变参数模板的内容。
作用 | 函数 | 描述 |
---|---|---|
将值赋给容器 | void assign(iterator first, iterator last ) | 以范围 [first, last) 中元素的副本替换内容。 |
访问指定的元素,同时进行越界检查 | reference at( int pos ) | 返回位于指定位置 pos 的元素的引用,有边界检查,越界抛出异常。 |
访问指定的元素 | reference operator[]( size_type pos ) | 返回位于指定位置pos 的元素的引用。不进行边界检查。 |
访问第一个元素 | reference front() | 返回到容器首元素的引用。 |
访问最后一个元素 | reference back() | 返回到容器中最后一个元素的引用。 |
返回底层数组 | T* data() | 返回指向作为元素存储工作的底层数组的指针。 |
判断是否为空 | bool empty() | 检查容器是否无元素。若为空,返回true。否则,返回false。 |
返回元素个数 | int size() | 返回容器中的元素数 |
返回可容纳的最大元素个数 | int max_size() | 基本上返回的是大小为千万或亿级的整数。 |
返回预留的存储空间大小 | void reserve( size_type new_cap ) | 增加 vector 的容量 |
返回当前存储空间能够容纳的元素数 | int capacity() | 返回容器当前已为之分配空间的元素数,即容量。 |
释放为使用的内存,减少内存使用 | void shrink_to_fit() | 请求移除未使用的容量 |
清空元素 | void clear() | 从容器擦除所有元素。此调用后 size() 返回零。 |
在指定位置插入元素 | insert(iterator pos, const T& value ) | 插入元素到容器中的指定位置 |
原地构造元素 | emplace(iterator pos, Args&&… args ) | 直接于pos 前插入元素到容器中 |
删除指定位置元素 | erase( iterator pos ) | 移除位于 pos 的元素 |
添加元素 | void push_back( const T& value ) | 将元素添加到容器末尾 |
在容器末尾就地构造元素 | void emplace_back( Args&&… args ) | 添加新元素到容器尾 |
移除元素 | void pop_back() | 移除容器的末元素 |
改变容器中可存储元素的个数 | void resize( int count ) | 重设容器大小以容纳 count 个元素 |
交换两个vector的内容 | void swap( vector& other ) | 将内容以及容量与 other 的交换。 |
注意:函数给出的只是基本使用,并且函数原型进行简化了,很多模板参数没给,还有部分函数没给返回值,说明日常使用中一般忽略。
// 1. 无参,默认大小为0
vector<int> a;
// 2. 指定大小
vector<int> b(5); // 在b中初始化5个默认值为0的元素
// 3. 指定大小和初始值
vector<int> c(10, 1);
// 4. 借助数组初始化
int arr[4] = {1,2,3,4};
vector<int> d(arr, arr+4); // 左闭右开, 不包括arr[4],当然也不存在arr[4](越界), 即有arr[0], arr[1], arr[2], arr[3]
// 5. 直接拷贝构造其他 vector
vector<int> f1(d);
// 6. 借助迭代器(左闭右开)
vector<int> f2(d.begin(), d.end());
vector<int> f2(d.begin(), d.begin()+2);
vector<int> nums{1, 2, 3, 4, 5, 6};
for(int i = 0; i < nums.size(); i++)
cout << nums[i] << " ";
cout << endl;
for (auto it = nums.begin(); it != nums.end(); it++)
cout << *it << " ";
cout << endl;
for (auto item : nums)
cout << item << " ";
cout << endl;
假设有vector<int>类型的变量,nums
vector<int> nums
*max_element(nums.begin(), nums.end())
。需要引入头文件 #include <algorthim>
*min_element(nums.begin(), nums.end())
。需要引入头文件 #include <algorthim>
sort(nums.begin(), nums.end())
。需要引入头文件 #include <algorthim>
sort(nums.rbegin(),nums.rend())
。需要引入头文件 #include <algorthim>
reverse(nums.begin(), nums.end())
。需要引入头文件 #include <algorthim>
// 方式一:借助集合 set 的自动去除 需要引入头文件 #include <set>
set<int> st(nums.begin(), nums.end());
nums.assign(st.begin(), st.end());
// 方式二:借助 unique 函数 需要引入头文件 #include <algorthim>
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
方法二解释:
(1)unique函数作用?unique()函数将相邻且重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器。
然后借助erase删除重复元素(erase函数可以区间删除,上面没说,只说了基本的删除固定位置的元素)。(2)为什么先排序?
先排序,因为unique函数要求数组有序。估计unique内部使用的快慢指针,能在时间复杂度为 O ( n ) O(n) O(n)的范围内将所有重复元素移到尾部.
注意:两种方法都不能保证vector元素间的相对顺序不变。去重后,vector升序排列。
vector<vector<int>> (m, vector<int>(n))
new_vector.assign(old_vector.begin(), old_vector.end())
注意:对于二维vector的拷贝,此方法亦可。
vector1.swap(vector2)
注意:对于二维的vector也适用。
迭代器是一种类模板,可以简单的看成是“指针”。
举个例子。你的任务(vector)是用杯子装水,元素个数size()就是你装了几杯水。容量capacity()是你有几个杯子,包括已经装水的杯子和空杯子。
也就是说 c a p a c i t y > = s i z e capacity >= size capacity>=size。
vector.end() 返回指向vector的最后一个元素的下一个 位置的迭代器,是没有元素存放的。
所有当用迭代器
it
遍历时,当it == vector.end()
时结束遍历。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。