Vector

Vector容器

与数组不同,它的大小可以动态变化,其存储由容器自动处理。就是说当空间不够时,会自动增加capacity,自己无需考虑重新分配空间。
例如:

vector<int> x(2);
int num=4;
while(num--){
	x.push_back(1);
}
x.capacity();//为6 自动扩大了x的空间

vector内存成长方式可归结以下三步曲:
(1)另觅更大空间;
(2)将原数据复制过去;
(3)释放原空间。

vector可以用下标访问元素,但是,只能访问size以内的
vactor实际占用空间为capacity大小


#include<vector>

/**********     声明   ***********/
vector<int> x;	

vector<int> x(5);  // 定义未赋值的大小为5的向量

vector<int> x(10, 2);   // 定义了初始值为5的,有10个整型元素的向量

vector<int> x = {0, 1, 2, 3};   // 定义了一个有4个整型元素的向量

vector<int>v1(x.begin()+i, x.begin()+j); //将x中[i,j)赋值给v1

vector<int>v1=x;  //x的值赋值给v1

v1.swap(x)     //交换v1和x的值



/*********** 遍历  ***********/
for (vector<int>::iterator i = x.begin(); i != x.end(); ++i) {
		cout << *i << ' ';
	}




/***********   基础操作  ***********/
 x.push_back(5);	// 在最后插入值为5的元素

x.pop_back();	   // 删除 x 向量的最后一个元素

x.reserve()          //改变当前vecotr的capacity

x.empty()         //是否为空

x.clear()         //清空当前的vector size=0 capacity不变

x[i] = 100;		  // 将 x 向量的第i个元素的值改为 100
x.at(i)           //与x[i]等价 增加了检查过界的功能

x.begin();		 // 返回一个迭代器,它指向 x 的第一个元素
x.front()        //返回x第一个元素的值

x.end();         // 返回一个迭代器,它指向 x 的最后一个元素的下一个位置,即超出了范围

x.back()         //返回最后一个元素的值

x.insert(x.begin()+i, 100); // 在 x 的第i个元素的位置(从0开始)插入一个值为100的元素。如x为1,2,3,插入元素后为1,100,2,3
v.insert(x.begin()+i,k,a);//从i开始插入k个a [i,i+k)

x.size();           // 返回 x 中元素的个数,实际所占空间
x.capacity();      // x最大容纳能力,与size不同

进阶操作


/***********      进阶操作     ***********/
x.resize(n,a)       
//重新设置vector的元素个数
//当n<=x.size()时,改变x.size的值,并且删除多余元素;
//当n>x.size()时,会改变x.size和x.capacity的值,用默认值或a填充

sort(x.begin(),x.end());  //从小到大排序

vector<int>::iterator it
vector<int>::iterator a
a = x.erase(it)        //删除it所指向的元素 
a = x.erase(it,it+3)   //删除[it,it+3)的元素
//被删除元素之后的所有元素都向前移动一位,size减少
//注意此时it变成了野指针!!
//函数返回值为被删除元素的下一个元素的迭代器
x.remove()


vector<int>(v).swap(v);//可以减少v的capacity
/*
(1)交换时,首先会用v1初始化一个临时对象,临时对象会根据v1的元素个数进行初始化;
(2)交换临时对象和v1;
(3)临时对象交换后销毁,v1原来的空间也销毁了;v1就指向现在的空间,使得v1的capacity减少
*/

reverse(x.begin(), x.end());


vector<vector<int> > x(5); //定义二维动态数组大小5行 
    for(int i =0; i< x.size(); i++)//动态二维数组为5行6列,值全为0 
    { 
        x[i].resize(6); 
    } 
或者
vector<vector<int> > x(5, vector<int>(6)); //定义二维动态数组5行6列 

//二维数组遍历
for(it = v.begin(); iter != v.end(); it++)
    {
        x = *it;
        for(i = x.begin(); i != x.end(); i++)
            cout << *i << " ";
    }
    
for (i = 0; i < v.size(); i++)
    {
        for(j = 0; j < v[i].size(); j++)
            cout << vec[i][j] << " ";
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值