C++STLvector

简介:

一、构造函数

1)、vecto<T> v; //创建一个空的vector<T>对象,这个对象的元素的类型为T,T是需要指定的。

2)、vector<T>  v(n); //创建一个vector<T>对象,v.size()为n, 每个元素的值都会是系统默认的值,如果T是类,就会是默认构造函数来初始化。

3)、vector<T> v(n, value);//跟第二个差不多,区别就是初始化不是默认值,而是用指定的value值来初始化这N个元素

4)、vector<T> v(iter1, iter2);//用迭代器来指定一个范围内的元素来初始化。如:

          vector<int> v;
          for (int i = 1; i <= 10; i++)
                 v.push_back(i);
          vector<int> v1(v.begin(), v.end());

二、常用的操作

v.push_back(value);//把value放到对象v的末尾

v.pop_back(); //把对象v的末尾的值删除,并缩减其容量

v.capacity();//返回v的容量

v.max_size();//返回v最大可以存放的元素的个数

v.size();//返回v中元素的个数

v.empty();//如果v中元素个数为0,那么就返回true,否则返回false

v.reserve(n, value);//设置v的容量为n,那么原来如果为m, m < n, 则m-n这些元素都用value来初始化

v.front();//返回v的第一个元素

v.back();//返回v的最后一个元素

v1.swap(v2);//交换v1\v2的内容

v.clear();//清空所有元素,并将其容量变为0

v.begin();//返回指向第一个元素的迭代器

v.end();//返回指向最后一个元素之后的迭代器

v.rbegin();//返回指向最后一个元素的迭代器

v.rend();//返回指向第一个元素之前的迭代器

v.insert(iterator, value);//在迭代器iterator指向的元素之前插入value

v.insert(iterator, n, value);//在迭代器iterator指向的元素之前插入n个value

v.earse(iterator);//删除迭代器iterator指向的元素删除掉

v.earse(iteBegin, iteEnd);//删除两个迭代器指定的范围内的元素

v[i] //像数组一样来访问元素,但是不会进行越界检查,跟数组一样不检查的

v.at(i);//返回v中下标为i的元素。这个成员函数会起先越界检查,如果越界会抛出out_of_range

如:

try

{

        for (int i = 0; i <= v.size(); i++)

              cout << v.at(i) << " ";

 }

catch (out_of_range)

{

        cout << "out of range" << endl;

}    

//那么这里就是输出out of range.


三、重载的运算符

1、 v1 = v2; //调用复制构造函数来完成赋值

2、v1 == v2; //按字典顺序来比较,如果相等,返回true。下面的几个也一样的道理

3、v1 < v2;

4、v1 > v2;

5、v1 != v2


四、迭代器部分

1、定义一个迭代器,有const的是用const限定的迭代器,不允许修改通过*来修改其值,

      有reverse的是逆序迭代器

  vector<int>::iterator it = v.begin(); //

  vector<int>::const_iterator cit = v.begin();

  vector<int>::reverse_iterator rit = v.rbegin();

  vector<int>::const_reverse_iterator crit = v.rbegin();


这样定义以后可以执行以下操作:

++it 、--it、*it、=、 == 、 !=、+、-、【】


顺序输出元素:

for (vector<int>::const_iterator cit = v.begin(); cit != v.end(); cit++)

       cout << *cit << " ";

cout << endl;


逆序输出元素:

for (vector<int>::const_reverse_iterator crit = v.rbegin(); crit != v.rend(); crit ++)

     cout << *crit << " ";

cout << endl;


五、创建二维vector对象

1)、const int ROWS = 3, COLUMNS = 4;

vecotor< vecotr<double> > table(ROWS,  vector<double> (COLUMNS, 0.0));

//创建了一个3*4的矩阵,其中的vector<double> (COLUMNS, 0.0);是创建一个临时对象,其元素个数为COLUMNS, 每个元素值为0.0;

2)、单下标访问

table[0];//这是第一行

3)、双下标

table[0][0];//table 表中的第一行第一列对象的元素

4、size()方法

table.size();//返回的是行数

table[r].size();//返回的是列数

5、遍历二维表

for (int row = 0; row < table.size(); row++)

     for (int col = 0; col < table[row].size(); col++)

            cout << table[row][col] << "  ";

cout << endl;

6、使用push_back()成员函限乘

加入一行:table.push_back(vector<double> (COLUMNS, 0.0));

在每行末尾直接加一个元素:

for (int row = 0; row < table.size(); row++)

      table[row].push_back(0.0);

创建不规则二维表

vecotor< vecotor<double> > table;

for (int col = 1; col <= 3; col++)

     table.push_back(vector<double> (col, 0.0));   

结果如图:

0.0

0.0 0.0

0.0 0.0 0.0

六、常见的错误

1、vector<int> v; 

for (int i = 0; i < 10; i++)

     v[i] = i;

//知道错在哪里了吗?因为v是一个空的对象,它的容量大小为0,这是不允许使用下标来赋值的。

//解决办法有两种:

 第一种:使用push_back()成员函数,这个函数会自动扩展其容量以适应新的元素

 第二种:使用reserve()成员函数来预留容量。

 

2、在使用迭代器的时候一定要注意,每次使用之后会有可能改变了指向,所以一定要注意,

最好在每次使用的都重新让他指向你需要的地方。


目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
HelloMeme:开源的面部表情与姿态迁移框架,将视频中的人物表情迁移到静态图像中生成动态视频
HelloMeme 是一个基于 Stable Diffusion 1.5 模型的面部表情与姿态迁移框架,通过集成空间编织注意力机制,实现了自然且物理合理的表情包视频生成。该框架具有强大的泛化能力和扩展性,适用于多种应用场景。
165 77
HelloMeme:开源的面部表情与姿态迁移框架,将视频中的人物表情迁移到静态图像中生成动态视频
|
3月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
140 14
|
3月前
|
网络架构
一文来带你了解 Flutter MaterialApp
一文来带你了解 Flutter MaterialApp
138 1
一文来带你了解 Flutter MaterialApp
|
3月前
|
弹性计算 负载均衡 安全
企业业务上云经典架构方案整体介绍
本次课程由阿里云产品经理晋侨分享,主题为企业业务上云经典架构。内容涵盖用户业务架构现状及挑战、阿里云业务托管经典架构设计、方案涉及的产品选型配置,以及业务初期如何低门槛使用。课程详细介绍了企业业务上云的全流程,帮助用户实现高可用、稳定、可扩展的云架构。
|
存储 缓存 自然语言处理
面试官问:Redis 是并发安全的吗?怎么做到的?
Redis作为一个非常成功的数据库,提供了非常丰富的数据类型和命令,使用这些,我们可以轻易而高效地完成很多缓存操作,可是总有一些比较特殊问题或需求需要解决,这时候可能就需要我们自己定制自己的 Redis 数据结构和命令。
面试官问:Redis 是并发安全的吗?怎么做到的?
|
Java Maven 数据格式
小白救星-SpringBoot最简教程03: springboot 读取 yml 配置
springboot 读取 yml 配置的几种方式。
895 0
|
前端开发 Java Spring
Spring Mvc Url和参数名称忽略大小写
在开发过程中Spring Mvc 默认 Url和参数名称都是区分大小写的   比如:www.a.com/user/getUserInfo?userId=1       www.a.com/user/getuserInfo?userId=1         www.
4830 0
|
数据可视化 数据挖掘 索引
Python 数据分析 —— Matplotlib ①
Python 数据分析 —— Matplotlib ①
729 0
Python 数据分析 —— Matplotlib ①
|
存储 人工智能 Kubernetes
CSDN 报告:阿里云容器服务成为中国开发者首选
最近,国内知名 IT 技术社区 CSDN 重磅发布《2021-2022 中国开发者调查报告》,旨在全面和深入地了解中国开发者群体整体现状、应用开发技术以及开发工具、平台的状况和发展趋势。该报告对近万名开发者进行调研,“云原生”首次作为独立章节出现在年度报告中,已发展为反映中国开发技术发展变化趋势的关键领域。
CSDN 报告:阿里云容器服务成为中国开发者首选
|
弹性计算 网络协议 小程序
阿里云建站云企业官网标准版、高级版和尊贵版功能区别、价格选择说明
阿里云建站云·企业官网定制分为标准版、高级版和尊贵版三个版本,标准版云企业官网4980元一年送半年,续费980元;标准版云企业官网6980元一年送半年,续费1980元;尊贵版云企业官网9980元一年送半年,续费2980元一年;旗舰版云企业官方设计费首年7000元,第二年续费仅支付SaaS系统费用,旗舰版SaaS系统价格为4480元/年。新手站长网来简单说下各个版本之间的区别:
613 0
阿里云建站云企业官网标准版、高级版和尊贵版功能区别、价格选择说明