欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vector

程序员文章站 2022-03-23 13:22:26
...

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
//请按任意键继续. . .