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 ...
随机推荐
- centos文件/文件夹操作-检查磁盘、内存、cpu使用情况-vi操作命令
Part1:CentOS文件/文件夹操作 1.新建文件夹 即创建目录 mkdir 文件名 新建一个名为test的文件夹在home下 vi source1 mkdir /home/test 注意:当创建 ...
- 用CSS3/JS绘制自己想要的按钮
我认为按钮的绘制分以下三个步骤 第一步,绘制按钮的轮廓 选择合适的html标签,设置轮廓的CSS /* html代码 */ <a href="#" class="b ...
- html技巧
1.防止盒子透出的解决办法 overflow:hidden:float不为none:display:inline-block: position不为static&relative ...
- MongoDB 排序文档
sort() 方法 要在 MongoDB 中的文档进行排序,需要使用sort()方法. sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序. 要指定排序顺序1和-1. 1用于升序排列 ...
- Centos7 下安装Apache2 + MySQL + PHP7
Apache 1.安装Apache yum install httpd 2.设置服务器开机自动启动Apache systemctl enable httpd.service 若要验证是否自动启动可在重 ...
- Android 解决NestedScrollView 嵌套 RecyclerView出现的卡顿,上拉刷新无效
解决卡顿的方法最简单的就是设置RecyclerView的android:nestedScrollingEnabled="false",放弃自己的滑动,交给外部的NestedScro ...
- 菜单Menu(AS开发实战第四章学习笔记)
4.5 菜单Menu Android的菜单主要分两种,一种是选项菜单OptionMenu,通过按菜单键或点击事件触发,另一种是上下文菜单ContextMenu,通过长按事件触发.页面的布局文件放在re ...
- Dancing Line、网易蜗牛读书——创新性分析
Dancing Line——视听效果极佳的解压游戏 介绍:跳舞的线是由猎豹移动公司和BoomBitInc制作的一款游戏,发行于2016年12月12日. 游戏规则:跟着音乐的节奏点击屏幕,完成转向,躲避 ...
- linux安装redis+RedisDesktopManager
一:redis简介 (REmote DIctionary Server Redis远程字典服务器) 1:Redis是一个开源的使用ANSI C语言编写.完全免费开源的,遵守BSD协议.支持 ...
- winform基础控件-例子学习
1.如图实现整数计算器 ComboBox控件: Items属性:添加集合中的项. this.comoper.Items.AddRange(new object[] { "+", & ...