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代码生成图片验证码
1.jsp页面显示验证码,src跳转到Controller里的:getImg_validate,reloadImg()作用是点击验证码就会换一张(重新请求getImg_validate) <ul ...
- 【SSH网上商城项目实战08】查询和删除商品类别功能的实现
转自:https://blog.csdn.net/eson_15/article/details/51338991 上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加 ...
- visualvm 插件 visual gc 使用介绍
visual gc 是 visualvm 中的图形化查看 gc 状况的插件. 具体详细介绍可参照: http://www.oracle.com/technetwork/java/visualgc-13 ...
- Hadoop worldcount
以前的公司和现在的公司,都用到了hadoop和hdfs.一直没入门,今天照着官网写了一个hadoop worldcount demo 1. hadoop是一个框架,什么是框架,spring是一个框架. ...
- BZOJ4650: [Noi2016]优秀的拆分(hash 调和级数)
题意 题目链接 Sol NOI的题都这么良心么.. 先交个\(n^4\)暴力 => 75 hash优化一下 => 90 然后\(90\)到\(100\)分之间至少差了\(10\)难度台阶= ...
- 01.css选择器-->类选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 利用PIE实现全球云分布图的效果
1.问题背景: 最近项目中获得了一份全球云分布图,客户要求把云显示在全球地图上,出现云的效果,如下图所示: [全球云分布图] [世界地图云示意图] 2.解决思路 咨询专业的业务人员,建议我测试下试试地 ...
- .NET AOP微型框架发布 --CleanAOP
CleanAOP--简介 作者:立地(欧文) 邮箱:jarvin_g@126.com 导语: AOP为Aspect Oriented Programming的缩写. 意为:面向切面编程.将日志记录,性 ...
- HTTP协议教程
文章内容: 1.HTTP协议概述 2.URL知识概述 3.HTTP消息结构详解 1.HTTP协议概述 定义: 超文本传送协议 (HTTP-Hypertext transfer protocol) 是分 ...
- 简析 Tomcat 、Nginx 与 Apache 的区别
简析 Tomcat .Nginx 与 Apache 的区别 本文讲的是简析 Tomcat .Nginx 与Apache的区别, 经常在用 apache 和 tomcat 等这些服务器,可是总感觉还是不 ...