vector
vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。 vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似, 不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了; 而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。
vector的扩充机制:按照容器现在容量的一倍进行增长。 vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加, 而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。 这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新
vector常用指令
1 、基本操作
(1)头文件#include.
(2)创建vector对象,
vector<int>v1; //定义空的vector
vector<int>v2(10); //产生大小为10的vector
vector<int>v3(10,-1); //产生大小为10,并且每个元素都是-1的vector
vector<int>v4(v3); //用一个vector产生一个vecotr
int arr[5]={1,2,3,4,5};
vector<int>v5(arr,&arr[5]); //以区间[beg;end)做为初值的vector
赋值:
c.assign(beg,end) //将[beg; end)区间中的数据赋值给c。
c.assign(n,elem) //将n个elem的拷贝赋值给c。
访问
c.front() // 传回第一个数据。
c.back() // 传回最后一个数据,不检查这个数据是否存在。
c.max_size() // 返回容器中最大数据的数量。
c.size() // 返回容器中实际数据的个数。
c.at(idx) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。
cout<<vec[0]<<endl; //使用下标访问元素,记住下标是从0开始的。
插入:
c.push_back(elem) // 在尾部加入一个数据。
c.insert(pos,elem) // 在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem) // 在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值。
vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
vec.insert(vec.begin()+i,a,b);在第i+1个元素前面插入a个b;
删除:
(3)尾部插入数字:vec.push_back(a);
(4)
(5)使用迭代器访问元素.
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素:
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)是否为空:vec.empty();
5.成员函数
c.begin() // 传回迭代器中的第一个数据地址。
c.end() // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.capacity() // 返回容器中数据个数。
c.clear() // 移除容器中所有数据。
c.empty() // 判断容器是否为空。
c.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) //删除[beg,end)区间的数据,传回下一个数据的位置。
get_allocator // 使用构造函数返回一个拷贝。
c.pop_back() // 删除最后一个数据。
c.rbegin() // 传回一个逆向队列的第一个数据。
c.rend() // 传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num) // 重新指定队列的长度。
c.reserve() // 保留适当的容量。
c1.swap(c2)
swap(c1,c2) // 将c1和c2元素互换。同上操作。
operator[] // 返回容器中指定位置的一个引用。
vector insert用法
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v(3);
v[0]=2; //v[0]是第0个元素
v[1]=7;
v[2]=9;
v.insert(v.begin(),8);//在最前面插入新元素。
v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素
v.insert(v.end(),3);//在向量末尾追加新元素。
v.insert(v.end(),4,1);//在尾部插入4个1
int a[] = {1,2,3,4};
v.insert(v.end(),a[1],a[3]);//在尾部插入a[1]个a[3]
vector<int>::iterator it;
for(it=v.begin(); it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
//8 2 1 7 9 3 1 1 1 1 4 4
//请按任意键继续. . .
上一篇: php下intval()和int强制转换使用的区别是什么
下一篇: css3怎么加内边框