变长数组,但是不是链表,刚开始误以为是链表,因为链表当时学的时候就是说的相比数组可以变长,熟练应用这个容器的每一个方法:
定义:
vector<int> v(10);//可以指定大小或者不指定,无论全局还是不是全局,这个都是全部是零
或者v.resize(10)、v(100,0) ,相比数组[],改成了(),意思就是可以变通,可以变长
方法:
迭代器:begin() end() cbegin() cend() rbegin() rend() crbegin() crend()
size()大小 和 resize()
capacity容量 和 reserve()有关系
max_size()能承受的最大数量
empty是否为空
shrink_to_fit减少使适合
front() back()第一个和最后一个元素的值
assign:有两个用法,一个是a.assin(v.begin(),v.end()) [,),第二个是a.assign(3,1),这两个都会改变原先里面的值
v.push_back() 和 pop_back()分别是向后面添加一个元素,向后面减少一个函数
v.insert这个函数有三个用法:
v.insert(v.begin() + i,x) 注意这个用法的返回是新插入x位置的迭代器
v.insert(v.begin(),n,x) 在这个位置之前插入n个x
v.insert(v.begin,v.begin + i,v.begin + j)指定位置插入区间的数
v.erase(v.begin() + i) 这个还有一个用法 erase(v.begin(),v.begin() + i)
v.swap(a)这个真的好神奇啊,交换两个的值,连同SIZE会一同改变
v.clear()size回一起改变
v.emplace(v.begin,x)只能插入一个值,而且效率相比insert更好,更高
v.emplace_back()这个相比push_back更快,以后就用这个了
光说不练肯定是不行的,既然为我们提供这么方便的函数,我们就要没事多用,只有用才能用的更加熟练,透彻,不能整天拿着数组给自己真的会一样
string:
String查找子串和字符
find:从前往后查找子串或字符出现的位置。
rfind:从后往前查找子串或字符出现的位置。
find_first_of:从前往后查找何处出现另一个字符串中包含的字符。例如:
s1.find_first_of("abc"); //查找s1中第一次出现"abc"中任一字符的位置
find_last_of:从后往前查找何处出现另一个字符串中包含的字符。
find_first_not_of:从前往后查找何处出现另一个字符串中没有包含的字
string::npos这个东西是一个空的东西,然后如果s.find一个找不到的东西,就会返回这个值