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、在使用迭代器的时候一定要注意,每次使用之后会有可能改变了指向,所以一定要注意,

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


目录
相关文章
|
10月前
|
机器学习/深度学习 人工智能 PyTorch
HelloMeme:开源的面部表情与姿态迁移框架,将视频中的人物表情迁移到静态图像中生成动态视频
HelloMeme 是一个基于 Stable Diffusion 1.5 模型的面部表情与姿态迁移框架,通过集成空间编织注意力机制,实现了自然且物理合理的表情包视频生成。该框架具有强大的泛化能力和扩展性,适用于多种应用场景。
326 77
HelloMeme:开源的面部表情与姿态迁移框架,将视频中的人物表情迁移到静态图像中生成动态视频
|
10月前
|
网络架构
一文来带你了解 Flutter MaterialApp
一文来带你了解 Flutter MaterialApp
291 1
一文来带你了解 Flutter MaterialApp
|
10月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
261 14
|
10月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
283 6
|
10月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
276 3
|
11月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
10月前
|
弹性计算 负载均衡 安全
企业业务上云经典架构方案整体介绍
本次课程由阿里云产品经理晋侨分享,主题为企业业务上云经典架构。内容涵盖用户业务架构现状及挑战、阿里云业务托管经典架构设计、方案涉及的产品选型配置,以及业务初期如何低门槛使用。课程详细介绍了企业业务上云的全流程,帮助用户实现高可用、稳定、可扩展的云架构。
353 0
|
机器学习/深度学习 文字识别 算法
OCR -- 非极大值抑制(NMS)算法详解
OCR -- 非极大值抑制(NMS)算法详解
420 0
OCR -- 非极大值抑制(NMS)算法详解
|
弹性计算 数据安全/隐私保护
阿里云服务器怎么连接?
阿里云服务器怎么连接? 对于不少站长来说,阿里云服务器是必不可少的一个必需品。但是对于不少新手来说,对于服务器却不是那么的了解。今天小编就来为大家介绍下连接阿里云服务器的两种方法。 电脑一台 服务器一台 方法一 首先第一点自然是登录云服务器管理平台,这个自行登录。
15013 1
|
Kubernetes Cloud Native 容灾
阿里云新版ACE全球通关第一人考试经历回顾
2022.3月底阿里云针对老版ACE进行了改版,针对云计算技术的发展趋势,新增了云原生等热门技术,同时新版ACE认证新增了实验和面试,全面考查考生的动手能力和理论知识结构,含金量大大提升。本人于2022.7.25号通过新版ACE实验,并于8.22号参加并通过了新版ACE第一场面试考试,有幸成为新版ACE全球通关第一人。现在本人备考学习新版ACE认证的过程记录成文,跟大家分享,期待越来越多的云计算技术爱好者学习和报考新版ACE,拿到属于自己的全球编号。
3593 19
阿里云新版ACE全球通关第一人考试经历回顾
下一篇
oss教程