开始刷leetcode之前,发现给的模版如下:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
.........................
}
};
里面有些东西让我有些措手不及,一方面之前刷的洛谷什么的,都是写完整的代码,但是leetcode则是给你一个函数,去掉了那些琐碎的东西,会让人更加关注算法本身,但是,我之前没有怎么用过c++的容器,因此有必要学习一番。
vector
1.vector是最简单也是最重要的一个容器。其头文件为<vector>.
2.vector是数组的一种类表示,它有以下优点:自动管理内存、动态改变长度并随着元素的增减而增大或缩小。
3.在尾部添加元素是固定时间,在头部或中间添加或删除元素是线性时间。
4.vector是可反转容器。。
vector的几种声明方法
vector<int> a ; //声明一个int型向量a vector<int> a(10) ; //声明一个初始大小为10的向量 vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量 vector<int> b(a) ; //声明并用向量a初始化向量b vector<int> b(a.begin(), a.begin()+3)//将a向量中从第0个到第2个作为向量b的初始值int n[] = {1, 2, 3, 4, 5} ; vector<int> a(n, n+5) ; //将数组n的前5个元素作为向量a的初值 vector<int> a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
vector输入及访问
1.可使用cin和cout进行输入和输出(vector的特有访问方法,一般容器只能通过迭代器访问
eg:
vector<int> a(10, 0) ; //大小为10初值为0的向量a 9 10 //对其中部分元素进行输入 11 cin >>a[2] ; 12 cin >>a[5] ; 13 cin >>a[6] ; 14 15 //全部输出 16 int i ; 17 for(i=0; i<a.size(); i++) 18 cout<<a[i]<<" " ; 19
2.使用遍历器(又称迭代器)进行输出控制
每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向***个元素把iter初始化为由名为begin的vector操作返回的值。假设vector不空,初始化后,iter即指该元素为ivec[0]。
由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器(off-the-end iterator),表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。由end操作返回的迭代器并不指向vector中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完vector中所有元素。
eg:
vector<int>::iterator t ; for(t=a.begin(); t!=a.end(); t++) cout<<*t<<" " ;