vector详讲(一)
<vector>头文件里带有两个类型参数的类模板,第一个参数是需要指定的数据类型,第二个是分配器(allocator)类型
template<class T, class Allocator = allocator<T>> class vector;
用分配器来为元素分配内存和释放内存。需要注意的是vector的运算符operator[] 和方法 at()的区别就是。前者不进行边界检查,而后者进行边界检查,超出边界会抛出out_of_range()的异常;
#include <iostream>
#include <vector>
#include <limits>
int main()
{
std::vector<double> vectorDouble;
//int max = -std::numeric_limits<double>::infinity();
//std::cout << "max : " << max << std::endl; //2^31 = 2147483648;max = -2147483648;
for(int i = ;true;++i)
{
double temp = 0.0;
std::cout << "enter scord(-1 is stop )" << i << ": ";
std::cin >> temp;
if(temp == -)
{
break;
}
vectorDouble.push_back(temp);
// if(temp > max)
// {
// max = temp;
// } } //max /= 100.0;
for(auto &element : vectorDouble)
{
//element = element / max;
std::cout << element << " ";
}
return ;
}
这里的numeric_limits<>模板详见 https://www.cnblogs.com/boost/p/10369272.html
vector的复制和赋值
vector储存对象的副本,其析构函数调用每个对象的析构函数,vector的赋值运算符和复制构造函数对所有的vector元素进行深度复制,处于效率的考虑,因该向函数和方法传递vector的引用或则是const引用。除了普通的复制和赋值外,vector还提供了assign()方法。这个方法可以删除所有的现存的元素,并且添加任意数目的元素;比如:
#include <iostream>
#include <vector>
#include <limits>
int main()
{
std::vector<int> oneVector({,,,,});
for(auto temp : oneVector)
{
std::cout << temp << " ";
}
std::cout << std::endl; oneVector.assign(,);
for(auto temp : oneVector)
{
std::cout << temp << " ";
}
return ;
}
结果是:
1 2 3 4 5
10 10 10 10 10
这里用到了初始化列表(<initializer_list>),
vector还有函数swap()方法,这函数交换两个vector对象,前提是这两个vector的类型是一样的。
#include <iostream>
#include <vector>
#include <limits>
int main()
{
std::vector<int> oneVector({,,,,});
//std::vector<int> twoVector({'a','b','c','d','e'});
std::vector<int> twoVector(,);
std::cout << "oneVector : ";
for(auto temp : oneVector)
{
std::cout << temp << " ";
}
std::cout << std::endl;
std::cout << "twoVector : ";
for(auto temp : twoVector)
{
std::cout << temp << " ";
}
std::cout << std::endl;
std::cout << "swap after : " << std::endl;
oneVector.swap(twoVector);
std::cout << "oneVector : ";
for(auto temp : oneVector)
{
std::cout << temp << " ";
}
std::cout << std::endl;
std::cout << "twoVector : ";
for(auto temp : twoVector)
{
std::cout << temp << " ";
}
std::cout << std::endl; return ;
}
结果是:
oneVector : 1 2 3 4 5
twoVector : 2 2 2 2 2
swap after :
oneVector : 2 2 2 2 2
twoVector : 1 2 3 4 5
vector的比较:vector模板类提供了六种比较运算符:== , != , > , < , >= , <=
如果是两个vector元素的个数相同并且元素也相同,则这两个vector对象就相同,在比较的过程中采用的是字典顺序,即:当在0~i-1的时候,两个vector都是相等的,但是在第i个元素不相等,当vectorOne[i] < vectorTwo[i]的时候,则vectorOne < vectorTwo;
#include <iostream>
#include <vector>
#include <limits>
int main()
{
std::vector<int> oneVector({,,,,});
std::vector<int> thridVector(,);
std::vector<int> twoVector(,);
if(twoVector == thridVector)
{
std::cout << "twoVector == thridVector" << std::endl;
}else
{
std::cout << "twoVector != thridVector"<< std::endl;
} if(oneVector == twoVector)
{
std::cout << "twoVector == oneVector" << std::endl;
}else
{
std::cout << "twoVector != oneVector" << std::endl;
} return ;
}
结果是:
twoVector == thridVector
twoVector != oneVector
vector详讲(一)的更多相关文章
- vector详讲(三)实例
移动语义: push语句有时候会通过移动语义来提高性能 #include <iostream> #include <vector> class Element { public ...
- vector详讲(二)迭代器
先看一下代码: #include <iostream> #include <vector> int main() { std::vector<double> dou ...
- stl——vector详解
stl——vector详解 stl——vector是应用最广泛的一种容器,类似于array,都将数据存储于连续空间中,支持随机访问.相对于array,vector对空间应用十分方便.高效,迭代器使ve ...
- zTree应用实例详讲(3)
zTree应用实例详讲(3) 上一讲中,已经讲到了重命名与删除.那么这一讲,我们来做新建文件夹. 其实新建是非常简单的,想一下我们想要的效果:点击新建,然后在一个节点下面出现一个新建的文件夹,并且与此 ...
- zTree应用实例详讲
zTree应用实例详讲(1) 因为项目的需要,要创建一棵动态的文件树,此树除了实现异步获取子节点外,还要实现对树节点的增.删.改.查.移动.重命名.批量删除.批量移动. 每一个操作都要和数据库打交道. ...
- Java - 静态代理详讲
Java - 静态代理详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 写在前面:*此章内容比较抽象,所以需要结合实际操作进行讲解* *需要有 ...
- Nginx技术进阶详讲
Nginx技术进阶详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 并发数问题 讲到并发数这个概念,想必各位应该都知道是什么意思,就是同时访问一个项目,就比我们现在做的一些项目完 ...
- SQL优化 MySQL版 - B树索引详讲
SQL优化 MySQL版 - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...
- SQL优化 MySQL版 - 多表优化及细节详讲
多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
随机推荐
- Java内存区域与虚拟机类加载机制
一.Java运行时数据区域 1.程序计数器 “线程私有”的内存,是一个较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器.Java虚拟机规范中唯一一个没有OutOfMemoryError情况 ...
- CentOS-Linux系统下安装MySQL
一.mysql的安装 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够 ...
- AngularJS - Directive Restrictions
While it’s cool to make a custom element like we did the the previous cast, it’s actually more commo ...
- vmware 虚拟机导入OVF出现路径错误
现状: 需要将原有数据中心的VM虚拟机导出本地OVF模板,然后迁移至新的机房虚拟化环境后从新导入. 问题: 导入OVF时候,先出现错误问题1,修复完成后,出现错误问题2 1. OVF迁移至本地以后,导 ...
- VC学习笔记---ATL MFC CLR三个库的区别
MFC.ATL和CLR是VC2005内置的三大库,涵盖了Windows的各种开发方法和开发应用.当然关于C++开发的库不止这三个,不过这三个是微软推荐. 从编程所处层次而言,WIN32为最底层,其次是 ...
- xfs参数简介
age_buffer_centisecs age_buffer_centisecs:(Min: 100 Default: 1500 Max: 720000) 多长时间设置为脏数据 xfsbufd_ ...
- MUI框架-01-介绍-创建项目-简单页面
MUI框架-01-介绍-准备-创建项目 从0开始快速高效学习 MUI 框架 官方文档:http://dev.dcloud.net.cn/mui/ui/ (1)MUI 介绍 MUI 是什么,解决了什么问 ...
- Python爬虫教程-03-使用 chardet 检测编码
Spider-03-使用chardet 继续学习python爬虫,我们经常出现解码问题,因为所有的页面编码都不统一,我们使用chardet检测页面的编码,尽可能的减少编码问题的出现 网页编码问题解决 ...
- Vue小案例(一)
案例需求: 创建一个品牌展示表格,表头有编号(id),品牌名称(name),创建时间(time)和操作,需要实现的功能是对数据的增删操作,和时间的格式化. 思路分析:在开发之前需要想清楚要用到Vue中 ...
- 把KB转化为KB及以上单位
/** * 把KB转化为KB及以上单位 * @param int $kb * @return string $new_val */ function return_over_kb($kb) { $kb ...