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

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


目录
相关文章
|
5月前
|
SQL XML Java
Mybatis的三种映射关系以及联表查询
Mybatis的三种映射关系以及联表查询
68 0
|
7月前
|
JavaScript 算法 前端开发
v-show和v-if有什么区别?使用场景分别是什么?
v-show和v-if有什么区别?使用场景分别是什么?
92 0
|
5月前
|
NoSQL 前端开发 MongoDB
mongoDB入门教程五:搭建一个简单的登陆注册界面
mongoDB入门教程五:搭建一个简单的登陆注册界面
108 0
|
5月前
|
JavaScript 前端开发 数据安全/隐私保护
一篇让你使用vue-cli搭建SPA项目
一篇让你使用vue-cli搭建SPA项目
91 0
|
5月前
|
存储 Linux 调度
2023年Linux的知识技术合集(基础入门到高级进阶)
2023年Linux的知识技术合集(基础入门到高级进阶)
|
8月前
|
数据挖掘 Python
探索Python中的数学奇幻世界:从math模块入门到精通
探索Python中的数学奇幻世界:从math模块入门到精通
88 0
|
6月前
|
JavaScript 前端开发 测试技术
Node.js入门教程
Node.js是一个基于JavaScript的运行时环境,专注于构建高性能、可伸缩的网络应用程序。本教程将为你提供一个简单的入门教程,帮助你开始使用Node.js。我们将逐步介绍如何安装Node.js,创建一个简单的服务器,以及编写一些基本的Node.js代码。
|
9月前
|
安全 应用服务中间件 Linux
Linux系统设置服务自启,实操nginx开机自启
Linux系统设置服务自启,实操nginx开机自启
|
10月前
|
存储 编译器 数据库
进阶C语言:文件操作
C语言关于文件操作的详细知识点
161 0
|
弹性计算 运维 监控
2022云栖精选—AnalyticDB MySQL 湖仓版在B站的最佳实践
陈浩 哔哩哔哩Bilibili资深数据开发专家
2022云栖精选—AnalyticDB MySQL 湖仓版在B站的最佳实践