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 ...
随机推荐
- 腾讯企业邮箱报错 "smtp.exmail.qq.com"port 465, isSSL false
一.报错 "smtp.exmail.qq.com" port 465, isSSL false 通过网上搜索查询一些资料,推测是邮箱的配置出问题了. 二.修改邮箱配置 // 创建属 ...
- WCF4.0安装 NET.TCP启用及常见问题
WCF4.0安装及NET.TCP启用 WCF 4.0 一般默认安装.net Framework 4.0的时候已经安装. 但如果先装.net framework 4.0,后装IIS,就会出现问题.需要重 ...
- spring-cloud-sleuth简单使用
快速开始 一.导入依赖 <!--链路追踪 start--> <dependency> <groupId>org.springframework.cloud</ ...
- java EE 新手入门了解
郑重申明:本文转载至https://blog.csdn.net/Neuf_Soleil/article/details/80962686,在此深表感谢! 为什么选择java? 想必有很多初学者会像我一 ...
- 关于JAVA项目报表选型过程
本人一直在走.NET技术路线,考虑到后期公司搞JAVA项目,也算是进行技术灾备,开始对JAVA技术进行关注.万事开头难,也是上来一头包.没办法,顶着上吧.上面开始分给我任务了.就是对后期项目报表进行方 ...
- 百度翻译cs文件英文注释
原由:本人英语烂,没办法看不懂国外的代码注释!只能借助其他手段来助我一臂之力了. 虽然翻译内容不是很准确,但好过什么都看不懂的强. 对吧?! 代码有点乱有用的园友自个整理一下吧! 最近没时间所以翻译后 ...
- python学习之老男孩python全栈第九期_day020知识点总结——序列化模块、模块的导入和使用
一. 序列化模块 # 序列化 --> 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化# 反序列化 --> 从字符串转换成数据类型的过程叫做反序列化# 序列 -- 字符串 # 什 ...
- ajax异步上传图片三种方案
转自:http://www.jb51.net/article/51180.htm 注:自己尝试了前两种,都可用: 目前常用的异步文件上传功能有几种,比较多见的如使用iframe框架形式,ajax功能效 ...
- MongoDB 安装成为Windows服务
使用以下命令将MongoDB安装成为Windows服务. mongod --logpath d:\data\logs.txt --dbpath d:\data --directoryperdb --s ...
- Codeforces Round #417 C. Sagheer and Nubian Market
C. Sagheer and Nubian Market time limit per test 2 seconds memory limit per test 256 megabytes O ...