注:写这篇文章是为了平时学习积累噢!文中的内容都表明出处啦,我只写了大概,不如原博主写的好,大家见谅哈~

目录

  • vector
  • accumulate
  • sort
  • find

vector

作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

特别注意:

使用vector需要注意以下几点:

1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;

2、Vector作为函数的参数或者返回值时,需要注意它的写法:

double Distance(vector&a, vector&b) 其中的“&”绝对不能少!!!

实例:vectortest;

//建立一个vector,int为数组元素的数据类型,test为动态数组名

简单的使用方法如下:

vector<int>test;//建立一个vectortest.push_back(1);test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2vector<vector<Point2f> > points; //定义一个二维数组points[0].size();  //指第一行的列数

基本操作

(1)头文件#include.

(2)创建vector对象,vector vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

(5)使用迭代器访问元素.

vector<int>::iterator it;for(it=vec.begin();it!=vec.end();it++)cout<<*it<<endl;

(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();

(9)清空:vec.clear();
算法

  • 使用reverse将元素翻转:需要头文件 #include<algorithm>

reverse(vec.begin(),vec.end());将元素翻转,即逆序排列!

(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含)

  • 使用sort排序:需要头文件#include,

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

定义排序比较函数:

bool Comp(const int &a,const int &b)
{return a>b;
}

调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

  • 输出Vector的中的元素
vector<float> vecClass; int nSize = vecClass.size();

//打印vecClass,方法一:

for(int i=0;i<nSize;i++)
{  cout<<vecClass[i]<<"     ";
}  cout<<endl;

需要注意的是:以方法一进行输出时,数组的下标必须保证是整数。
//打印vecClass,方法二:

for(int i=0;i<nSize;i++)
{  cout<<vecClass.at(i)<<"     ";
}  cout<<endl;

//打印vecClass,方法三:输出某一指定的数值时不方便

for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++)
{  cout<<*it<<"   ";
}  cout<<endl;

二维数组的使用:

#include "stdafx.h"
#include <cv.h>
#include <vector>
#include <iostream>
using namespace std;
int main()
{using namespace std;int out[3][2] = { 1, 2, 3, 4,5, 6 };vector <int*> v1;v1.push_back(out[0]);v1.push_back(out[1]);v1.push_back(out[2]);cout << v1[0][0] << endl;//1cout << v1[0][1] << endl;//2cout << v1[1][0] << endl;//3cout << v1[1][1] << endl;//4cout << v1[2][0] << endl;//5cout << v1[2][1] << endl;//6return 0;
}

转自博主 那年聪聪

使用const引用是一个好习惯(const 修饰容器,则初始化后不能增删元素也不能修改元素,也不能改变容器大小 ,也就说不能做任何改动。)
在C++中容器都是值拷贝的,因此不使用引用的话,会大量拷贝垃圾数据.其实,可以这么说C/C++是值拷贝编程语言。不使用额外的技术,比如指针、引用,都会发生垃圾数据的拷贝。当然,到底是不是垃圾数据由你自己决定,值拷贝是无法彻底摒弃的。

c++中vector和vector<int*>的用法比较(转自 军说网事)

accumulate

accumulate定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理

  • 算法简介:accumulate(iterator beg, iterator end, value);
    计算容器元素累计总和;[beg,end)为起始迭代器和结束迭代器,vaule为起始值 。

主要用于数值的累加求和、字符串的连接。

例子
使用accumulate(iterator beg, iterator end, value)函数计算vector容器中所有元素(0-100)的和,其初始值为1000

#include<iostream>
#include<vector>
#include<string>
#include<numeric>
using namespace std;// 常用算术生成算法: accumulate(iterator beg, iterator end, value); 计算[beg,end)区间中所有元素的和
// all = value + sum(beg,end) void test01(){vector<int> vec;for(int i=0; i<=100; i++){vec.push_back(i); } vector<string> vecs;vecs.push_back("Hello");vecs.push_back("World");vecs.push_back("!");// 对string类型进行累积string sunStr = accumulate(vecs.begin(), vecs.end(), string(""));// 计算vec容器中所有元素的总和 int sumNum = accumulate(vec.begin(), vec.end(), 1000);cout << "vec容器中元素的总和为:" << sumNum << endl;cout << "vecs为:" << sunStr << endl;}int main(){test01();system("pause");return 0;}


转自博主 凉冰难消一腔热血
构建二维动态数组

int **p;
p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组
for (int i = 0; i < 10; ++i)
{p[i] = new int[5];
}

定义二维vector

vector<vector<int>> v;

访问二维vector的元素的三种方式
如果指定外层和内层向量的大小,就可用operator[]进行读和写;如果只指定外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写。

  1. 指定外层vector大小

可用push_back函数进行初始化:

v.resize(3);
v[1].push_back(9);
  1. 遍历指定内层vector大小
    提前设定好每行vector的大小,就可用operator[]访问,如下:
for(int i=0;i<3;i++)v[i].resize(3);
  1. 一次指定内外层vector大小
v.resize(n, vector<int>(m));

定义一个二维整形数组并初始化:

vector<vector<int> > array(m); //这个m一定不能少//vector<int> array[m];
//初始化一个m*n的二维数组
for(int i=0;i<m;i++)
{array[i].resize(n);
}
//遍历赋值
for(i = 0; i < array.size(); i++)
{for (j = 0; j < array[0].size();j++) {   array[i][j] = (i+1)*(j+1); }
}

sort

用法:

1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>;

2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)

3、sort函数有三个参数:(第三个参数可不写)
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是降序也可是升序;还可以不写第三个参数,此时默认的是升序。

两个参数:

#include<iostream>
#include<algorithm>
using namespace std;int main(){int a[10]={1,3,5,2,14,6,7,62,9};for(int i=0;i<10;i++){sort(a,a+10);for(i=0;i<10;i++){cout<<a[i]<<" ";}}system("pause");return 0;}

三个参数:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;bool myfunction(int i,int j){return (i<j);
}//升序排列
bool myfunction2(int i,int j){return (i>j);
}//降序排列
struct myclass{bool operator()(int i,int j){return (i<j);}
}myobject; int main(){int myints[8]={32,14,64,3,23,6,44,75};vector<int> myvector(myints,myints+8);sort(myvector.begin(),myvector.begin()+4);sort(myvector.begin()+4,myvector.end(),myfunction);sort(myvector.begin(),myvector.end(),myobject);cout<<"myvector contains:";for(vector<int>::iterator it=myvector.begin();it!=myvector.end();it++){cout<<' '<<*it;}cout<<'\n';system("pause");return 0;}


string使用反向迭代器来完成逆序排列(rbegin,rend)

#include<iostream>
using namespace std;int main(){string str("abcdef");string s(str.rbegin(),str.rend());cout<<s<<endl;return 0;}


转自博主 布林叮咚

想要拷贝元素:for(auto x:range)

想要修改元素 : for(auto &&x:range)

想要只读元素:for(const auto &x:range)

find

find() 函数本质上是一个模板函数,用于在指定范围内查找和目标元素值相等的第一个元素。

如下为 find() 函数的语法格式:
InputIterator find (InputIterator first, InputIterator last, const T& val);

其中,first 和 last 为输入迭代器,[first, last) 用于指定该函数的查找范围;val 为要查找的目标元素。

C++常用函数汇总(持续更新)相关推荐

  1. 工作中php遇到的问题以及常用函数整理(持续更新)

    说明 以下整理的文档是本人2017年从事php开发到目前遇到的问题的部分整理,因为上家公司有改错本这个东西,偶然间翻开,整理了一部分,后续遇到问题会持续更新,最新更新的内容会放到最前面. php开启错 ...

  2. networkx常用函数总结(持续更新)

    一.库函数 networkx常用函数总结 用途 函数 读取文件/生成图 创建无向图 G = nx.Graph() 创建有向图 G = nx.DiGraph() 读取gml文件 G=nx.read_gm ...

  3. mysql sql 函数大全_MySQL常用SQL/函数汇总(持续更新)

    自动生成ROWNUN SELECT (@rowNO := @rowNo+1) AS rowno,a.uuid FROM (SELECT * FROM h_log_proc) a,(SELECT @ro ...

  4. Excel 数据分析之Power Pivot常用函数(持续更新)

    目录 RELATED函数 RELATEDTABLE RANK.EQ COUNTROWS CALCULATE DIVIDE RELATED函数 RELATED(ColumnName) RELATED(返 ...

  5. HFSS常用操作汇总(持续更新)

    HFSS常用操作 操作类 convert to read only 切角 Non-Model 圆极化天线使用Discrete扫频 peakGain and GainTotal 局部区域的电流或电场等的 ...

  6. python常用函数(持续更新)

    1.abs() abs是 absolute 的缩写,它会返回数字的绝对值. abs(-3.14) 3.14 2.any() any()函数用于判断给定的可迭代参数是否全部为False.如全为False ...

  7. SAP HR 常用函数*持续更新中...

    1.1   DAY_ATTRIBUTES_GET                      获取两个日期间的每一天的属性值 1.2   FIMA_DAYS_AND_MONTHS_AND_YEARS   ...

  8. Oracle 常用函数总结(持续更新)

    LOWER:大写转小写 select LOWER('Hello Java') from dual 运行结果:hello java UPPER:小写转大写 select UPPER('Hello Jav ...

  9. iOS精品资源汇总(持续更新)

    文章目录 引言 I.iOS自定义视图相关热门资源 1.1 <用户协议及隐私政策>弹框 1.2 电子签名 1.3 商品详情页 1.4 上传图片视图的封装[支持删除和添加] 1.5 查看风险商 ...

  10. linux常用指令(持续更新)

    linux常用指令(持续更新) 基本访问指令: 直接进入用户的home目录: cd ~ 进入上一个目录: cd - 进入当前目录的上一层目录: cd .. 进入当前目录的上两层目录: cd ../.. ...

最新文章

  1. 伪元素first-letter
  2. python的cfg是什么模块_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全...
  3. BZOJ 4516 [Sdoi2016] 生成魔咒
  4. java 数字的进制转换
  5. LoadRunner 11压测时碰到错误Error: missing newline in *:\*****\*.dat
  6. ogg for java_luogg_java学习_04_数组
  7. 制定Windows重要安全计划——12步纲要
  8. java调用nlpir_ZH奶酪:Java调用NLPIR汉语分词系统
  9. MapGIS K9三维TDE平台实现动态光标效果
  10. 信息源按加工深度划分_信息检索教程
  11. Diffie-hellman 密匙交换
  12. 考研政治|马克思主义基本原理
  13. python 2048游戏的设计_Python练习:100行代码实现一个简易的2048游戏
  14. initial commit
  15. Centos7 搭建NFS文件共享存储
  16. bad transparency mask. 解决办法
  17. python解码图片_python的opencv读取解码的base64图片失败
  18. 【数据库】SQL语句(超全查询语句)
  19. 【营销】史上最全4P、4C、4S、4R、4V、4I营销理论
  20. 关于DWA导致的程序崩溃或挂死问题

热门文章

  1. CHAPTER 23 Question Answering
  2. 【ArcGIS错误集锦002-Server02】ArcGISserver发布站点报错Failed to create the site. Could not create directory path
  3. lzma java sdk,如何使用LZMA SDK在Java中压缩/解压缩
  4. excel如何快速将中文翻译为英文?
  5. 服务启动时,报Command line is too long异常
  6. [英语语法]词法之动词:时态语态
  7. php 获取农历,PHP通过新历获取农历日期的方法
  8. C#:实现公历转农历算法(附完整源码)
  9. 微服务如何实现各个模块之间相互调用
  10. 华硕AC86U路由器最佳设置(解决5G信号断流和米家设备掉线的问题)