vector用法
#include <vector>
定义对象
vector<int> a; #将一个对象a用向量定义,里面是int类型
vector<int> b(10); #开始时b有10个元素
vector<int> c(10,1) #开始时有10个元素,且都是1
用vector时要注意,在添加对象时,不能用下标表示
添加对象
pushback
int t;
a.pushback(t); #将t放在a的向量尾部
insert
int main()
{
int t;
int b[10] = { 1,2,3,4,5,6,7,8,9 };
cin >> t;
vector <int> a(b,b+10); //将一个数组放入向量中,(始指针,尾指针),只能在定义的时候放或用其他方法 例如:a.assign(b,b+10);
a.push_back(t);
vector <int>::iterator be,en,now;
be = a.begin();
a.insert(be+1, t, t); //将t个t插入be+1位置中,a.begin()位置为0位,可以插入最前面
be = a.begin(); //插入后的begin()和end()位置会改变,要注意
en = a.end();
for (now = be; now != en; ++now) {
cout<<*now;
}
}
插入后的begin()和end()位置会改变,且插入的位置的i-1位上一定要有数,不然报错,要注意
查找对象
常用的:
find(a.begin(),a.end(),t) //从开头到结尾找t,返回的是迭代器,此函数在algorithm里
a.front() //返回第一个元素
a.back() //返回最后的元素
a[i] //a[i]要存在
向量长度操作
a.begin() //返回a始位置的迭代器
a.end() // a[int(a.end()-a.begin())]是没有数的,会报错
a.empty() //判断a是否为空向量,是的话返回true
a.size() //返回大小
a.capacity() //返回a中能容纳的大小,大于目前a的size(),但目前还不知道用法,可能是查看当前的容量,以提前扩容
size():明明有我了-_-
a.resize(100[,1]) //调整长度,少了就用1补,最后的参数也可以不写,则补的数随机,多了删,保留前面的
a.reserve(100) //预留100个a的数据类型的位置,如果本来的长度就比n大也没关系,维持原长
向量的删除操作(最好是在删后,更新迭代器,不然不知道在哪了)
a.clean //将向量清空,a.begin()也会变
a.erase(a.begin(),a.begin()+5) //从a[0]删到a[4],a[5]不删,a.end()会变,a.begin()不变
a.pop_back() //删掉最后的元素,a.end()会变,a.begin()不会变,但如果把最后的元素删了(现在每东西在向量了),a.begin()就会变
那么将当前迭代器所在位置删了,会怎么样呢?
int main() //把a中的下标是双数的给删去
{
int c[] = { 1,2,3,4,5,6,7,8,9,0 };
vector<int> a, b(c,c+10);
a.swap(b);
vector<int>::iterator en = a.end(),be=a.begin(),ii;
for (vector<int>::iterator i = a.begin(); i != a.end(); ++i) { //错误,因为删数以后下标会变
ii = i;
if (int(i - be) % 2 == 0&&i!=a.begin()) {
a.erase(ii);
}
}
}
int main() //把a中的下标是双数的给删去
{
int c[] = { 1,2,3,4,5,6,7,8,9,0 };
vector<int> a, b(c,c+10);
a.swap(b);
vector<int>::iterator en = a.end(),be=a.begin(),ii;
ii = be;
for (int i = 0;ii+i<a.end();++i) {
if (i % 2 == 0&& i!=0) {
a.erase(ii + i);
ii = ii + i - 1; //记录减前的最后位,双数就是隔一个数,每隔一个数就删了
i = 0;
}
}
a.erase(a.begin());
for (ii = a.begin(); ii != a.end(); ++ii) cout << *ii<<" ";
}
向量间的操作
a.assign(b.begin(),b.begin()+3) //将b的前三个数赋给a,但会清除原来a中的所有东西,b可以是数组,但参数要是指针,而不是迭代器
a.swap(b) //将a向量与b向量直接交换,注意b也会变成a