STL基础1:vector
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std; bool findCondition(int x)
{
return x%2==0;
} //仿函数
template<typename T>
struct display{
void operator()(const T &x)const
{
cout<<x<<" ";
}
}; int main()
{ int i; vector<int> iv;//vector 追加和随机访问效率高,插入删除效率低 int ia[]={0,1,2,3,4,5,6,6,6,7,8};
vector<int> iv2(ia,ia+sizeof(ia)/sizeof(int)); //数组转换成向量
for_each(iv2.begin(),iv2.end(),display<int>());
cout<<endl; iv.push_back(1);
iv.push_back(2);
iv.push_back(3);
iv.push_back(4);
iv.push_back(5);
iv.pop_back(); //推出 5 ,返回void for_each(iv.begin(),iv.end(),display<int>());
cout<<endl; cout<<"元素的数量"<<iv.size()<<"容量"<<iv.capacity()<<endl; //随机读写
iv[0] = 99;
cout<<iv[0]<<endl; vector<int>::iterator it,it2;
it=iv.begin();//iv.begin()指向第一个元素
iv.insert(it,3,-1);//在it所指的单元前插入3个-1 it=iv.end()-1;//iv.end()指向了下一个最后一个元素的下一个元素
iv.erase(it);//删掉倒数第1个元素,也可以删除区间的元素
cout<<"迭代器输出 "<<*it<<endl;//输出的是刚才那个被删掉的元素4,也就是说删掉元素之后,it并没有改变,而且指向了一个被删除的元素 iv2.assign(iv.begin(),iv.end());//复制iv到iv2
if(iv==iv2)
{
cout<<"iv == iv2"<<endl;
}
iv2.clear();//删除容器中的所有元素,iv.size()变成0,而iv.capacity()不变,也就是内存并未归还给OS
iv2.swap(vector<int>());//iv.capacity()也变为0,删除并归还内存给OS的常用方法 //非变异算法
it = find(iv.begin(),iv.end(),3);//在[first,last)(闭开区间)上查找等于3值的元素
if(it==iv.end()){
cout<<"Not found 3"<<endl;
}else{
cout<<"Found in iv["<<it-iv.begin()<<"]"<<endl;
} it = find_if(iv.begin(),iv.end(),findCondition);//查找被2整除的元素
if(it==iv.end()){
cout<<"Not found %2"<<endl;
}else{
cout<<"Found in iv["<<it-iv.begin()<<"]"<<endl;
} cout<<"count -1 is "<<count(iv.begin(),iv.end(),-1)<<endl; //求和,第三个值0是用于函数辨识数据类型
cout<<"sum = "<<accumulate(iv.begin(),iv.end(),0)<<endl;
//string sum = accumulate(v.begin() , v.end() , string(" "));这个可以把向量字符串连接起来 //变异算法
cout<<"翻转 前";
for_each(iv.begin(),iv.end(),display<int>());
cout<<endl;
reverse(iv.begin(),iv.end());
cout<<"翻转 后";
for_each(iv.begin(),iv.end(),display<int>());
cout<<endl; replace(iv.begin(),iv.end(),-1,200);//将所有的-1替换成200
fill_n(iv.begin(),3,44);//在开头填充3个44,如果空间不足就会报错
fill_n(iv.begin()+4,2,2);
//generate_n(iv.begin(),5,rand);//条件填充
//it = remove_if(iv.begin(),iv.end(),findCondition);//删除条件内的元素,依次填充到头,然后返回一个it,这个it是尾部,实际的iv.size()是不变的
cout<<"unique 前的值"<<endl;
for_each(iv.begin(),iv.end(),display<int>());
cout<<endl;
it = unique(iv.begin(),iv.end());//只是把唯一的元素全部移到了前面,iv的值并不改变
cout<<"unique 后的值"<<endl;
for_each(iv.begin(),iv.end(),display<int>());
cout<<endl;
for(it2=iv.begin();it2!=it;it2++)
{
cout<<*it2<<endl;
}
cout<<iv.size()<<" 2 "<<iv2.size()<<endl;
unique_copy(iv.begin(),iv.end(),back_inserter(iv2));//将结果拷贝到iv2,并且iv2要有足够的空间,所以这里需要back_inserter。
for_each(iv2.begin(),iv2.end(),display<int>());
cout<<endl;
//排序算法 //转换成堆,排序
make_heap(iv.begin(),iv.end());
sort_heap(iv.begin(),iv.end()); sort(iv.begin(),iv.end());//等同于sort(vect.begin(), vect.end(), less<int>() );降序排序sort(iv.begin(),iv.end(),greater<int>());
stable_sort(iv.begin(),iv.end());//使相同的值在原来的位置不变,参数传入的是结构体时,会发现两者之间的明显区别
partial_sort(iv.begin(),iv.begin()+4,iv.end());//取top4
random_shuffle(iv.begin(),iv.end());//打乱顺序 for (i=0;i<iv.size();i++)
{
cout<<"0+"<<iv[i]<<endl;
}
cout<<"元素的数量"<<iv.size()<<endl; return 0;
}
STL基础1:vector的更多相关文章
- 【STL基础】vector
vector 构造函数: //default: vector<T> v; //空的vector //fill: vector<T> v(n); //n个元素的vector,元素 ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- STL基础复习
stl容器:vector,deque,list,map/multimap,set 特殊容器:stack,queue,priority_queue 通用操作 size() 返回当前容器元素数量 emp ...
- STL基础--基本介绍
为什么要使用C++标准库 /* * 为什么使用C++标准库: * 1. 代码重用,不用重新造轮子 * 2. 效率(快速,且使用更少的资源). 现代C++编译器经常对C++标准库的代码有优化 * 3. ...
- 【c++基础】vector初始化的几种方式
前言 STL中的vector有几种初始化方式,根据不同的需求选择合适的初始化方式. 源码 // constructing vectors #include <iostream> #incl ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- 2.1实现简单基础的vector
2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ...
随机推荐
- python网络编程之开启进程的方式
标签(空格分隔): 开启进程的方式 multiprocessing模块介绍: python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyth ...
- 获取cookie
1.cookie是存储在用户本地终端的数据,实际上是一小段的文本信息 2.cookie的作用 帮助web站点保存有关的访问者的信息,方便用户的访问,如记住用户名和密码,实现自动登录功能案例:查看访问我 ...
- Java 管道PipedInputStream PipedOutStream PipedReader PipedWriter
java中的管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另外一个线程从输入管道中读取数据.通过使用管道,实现不同线程间的通信,而不必借助类似 ...
- JMeter学习(三十四)使用jmeter来发送json/gzip格式数据(转载)
转载自 http://www.cnblogs.com/yangxia-test 一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种 ...
- JMeter学习(二十八)内存溢出解决方法(转载)
转载自 http://www.cnblogs.com/yangxia-test 使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jme ...
- 基于正则表达式用requests下载网页中的图片
在慕课网看了正则表达式和requests的课程后,为了加深学习记忆,决定简单记录. 实现步骤: 1.先打开你要下载的网页,查看源码找出图片位置 2.编写正则匹配图片url 3.保存图片到本地 图文步骤 ...
- Centos 7 MariaDB Galera cluster 部署
一.安装环境准备 1.系统: CentOS Linux release 7.4.1708 (Core) 2.hosts 10.6.32.51 openstack1 10.6.32.52 opensta ...
- Mysql 5.7 弱密码限制,及创建用户无密码用户
一.介绍 1.haproxy Mysql 需要一个无密码登录的mysql用户. 2.Mysql 5.7 版本默认安装了 validate_password 插件,作用:要求密码的复杂度. 3.创建用户 ...
- P3375 【模板】KMP字符串匹配
P3375 [模板]KMP字符串匹配 https://www.luogu.org/problemnew/show/P3375 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在 ...
- 微信小程序template模板与component组件的区别和使用
前言: 除了component,微信小程序中还有另一种组件化你的方式template模板,这两者之间的区别是,template主要是展示,方法则需要在调用的页面中定义.而component组件则有自己 ...