vector数据结构,采用的是连续的线性空间,属于线性存储。他采用3个迭代器_First、_Last、_End来指向分配来的线性空间的不同范围,下面是声明3个迭代器变量的源代码。
template<class _Ty, class _A= allocator< _Ty> >
class vector{
...
protected:
iterator _First, _Last, _End;
};
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
Leetcode中有个题目可以用来练手,附上答案
725. 分隔链表https://leetcode-cn.com/problems/split-linked-list-in-parts/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* root, int k) {
vector<ListNode*> ret;
ListNode* cur = root;
int count = 0;
while(cur){
count++;
cur = cur->next;
}
cur = root;
int size = count/k;
int rem = count%k;
for(int i = 0; i < k; ++i){
if(cur){
ListNode* Head = new ListNode(-1);
ListNode* prev = Head;
for(int j = 0; j < size + (rem>0?1:0); ++j){
prev->next = new ListNode(cur->val);
prev = prev->next;
cur = cur->next;
}
rem--;
ret.push_back(Head->next);
}
else{
ret.push_back(NULL);
}
}
return ret;
}
};