c++头文件之Vector(Vector的用法)

c++头文件之Vector(Vector的用法)

c++头文件之Vector

开始学习c++,再这个过程中第一个令人头疼的地方就是头文件的含义了,c++头文件的内容会随着我的深入学习进行更新.

首先,我们需要该清楚Vector的定义: C++标准库提供了被封装的动态数组——Vector。大体上讲,就是更容易上手的动态数组.让我们看看Vector的优缺点.

优点:

1). Vector可以存放任意类型的数据

2). 容量可以自动扩展

3). 初始化形式简单,多样

4). 可以插入或删除元素

5). 可以获取数组的长度(是否为空)

6). 也是通过下标来访问的

7). 能够一下清除所有数据

8). 强制调整数组元素的个数以及数值

9). 将数组的容量进行人为的扩大

10). 将两个Vector数组的值进行整体性交换

缺点: Vector的操作简单,容易上手,是数组的"升级版",但是Vector的每次自动扩容都是增加当前空间的50%(第一次除外);会消耗大量的空间与时间,所以小数据使用Vector还是很高效的.

使用步骤:

(1) 加入头文件

代码如下(示例):

#include

using namespace std;

(2) Vector数组的初始化

代码如下(示例):

//1. 直接赋值

vector A1 {1,2,3,4,5}; //一维

vector > A2 {{1,2,3},{1,2,3}};//二维

//2. 不带参数构造

vector A1;//空的数组,长度为0(size()为0)可以用push_back(elem)输入元素

//3. 带参数构造

vector A2(10); //10个数据全为0

vector A3(10,1);//10个数据全为1

//4. 通过同类型的vector初始化

vector A1(5,1);

vector A2(A1); //通过A1来初始化A2

(3) 访问

3.1 通过地址访问

代码如下(示例):

///通过地址访问

vector A1 {1,2,3,4,5}; //一维

vector::iterator k=A1.begin();//返回第一个元素的地址

cout<<*k<

cout<<*(k+1)<

vector::iterator k=A1.end(); //返回最后一个元素的下一位地址

cout<<*(k-1)<

3.2 通过下标访问

代码如下(示例):

///通过下标访问

vector A1 {1,2,3,4,5}; //一维

cout<

(4) 增,删

4.1 插入,删除(栈顶)

代码如下(示例):

///添加,删除

A.pop_back(); //删除最后一个元素

A.push_back(elem); //在尾部添加一个元素

4.2 特定位置插入删除

代码如下(示例):

///特定位置插入删除

vector A1 {1,2,3,4,5}; //一维

vector::iterator k=A1.begin();//下标从0开始

A1.insert(k+1,9); //A1={1,9,2,3,4,5}

A1.erase(k+1); //A1={1,3,4,5}

(5) 获取数组的长度

代码如下(示例):

///获取长度或者判断数组是否为空

vector A1 {1,2,3,4,5};//一维

cout<

cout<

(6) 其他用法

代码如下(示例):

///返回可用总元素

A.capacity(); //返回A在内存中总共可以容纳的元素个数

///强制调整元素个数以及数值

A.resize(10); //将A的现有元素个数调至10个,多则删,少则补,其值随机

A.resize(10,2); //将A的现有元素个数调至10个,多则删,少则补,其值为2

///将数组扩容

A.reserve(100); //将A的容量(capacity)扩充至100,也就是说现在测试A.capacity();的时候返回值是100.这种操作只有在需要给A添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当A的容量不足时电脑会自动扩容,当然这必然降低性能)

///将Vector数组A,B的元素进行整体交换

A.swap(B); //B为向量,将A中的元素和B中的元素进行整体性交换

(7)几种重要的算法,使用时需要包含头文件:

#include < algorithm >

代码如下(示例):

#include

(1)sort( A.begin() , A.end() ); //对a中的从A.begin()(包括它)到A.end()(不包括它)的元素进行从小到大排列

(2)reverse(A.begin(),A.end()); //对A中的从A.begin()(包括它)到A.end()(不包括它)的元素倒置,但不排列,如A中元素为1,3,2,4,倒置后为4,2,3,1

(3)copy(A.begin(),A.end(),B.begin()+1); //把A中的从A.begin()(包括它)到A.end()(不包括它)的元素复制到B中,从B.begin()+1的位置(包括它)开始复制,覆盖掉原有元素

(4)find(A.begin(),A.end(),10); //在A中的从A.begin()(包括它)到A.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

相关推荐

如何删除Epic Games账号:手把手教学
体育比分365最新版app下载

如何删除Epic Games账号:手把手教学

📅 08-11 👁️ 1080
怎么样取消腾讯视频会员连续包月
365bet娱乐平台官网

怎么样取消腾讯视频会员连续包月

📅 07-30 👁️ 9336
普京妻子解释离婚原因:我们几乎见不到对方
体育比分365最新版app下载

普京妻子解释离婚原因:我们几乎见不到对方

📅 06-28 👁️ 7650