本来想着申请了博客园以后 我要写的博客都必须是有深度有内涵的...好吧 结果我只能说我想多了 还是得一步一步慢慢来

最近小学期的任务是要做一个学校食堂餐卡管理系统     有“严重拖延症”的我  果然把它拖到了最后这一周才开始努力奋斗

这个任务很显然需要用到类的动态数组  本来想着自己写一个来着 结果发现C++库就有现成的被封装的动态数组 - vector

平常我们都忽视了它的存在 现在我才重新再回头学习它 vector<元素类型>数组对象名(数组长度,元素初值);

vector 它实际上是一个类模板,具有各种类型 ,对其数组对象的元素访问与普通数组具有相同型式,可以说是十分方便的

要想使用它,必须在你的头文件加上#include <vector>; vector<man>a

a.assign(beg,end)c.assign(n,elem) //将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给a。

a.at(idx) //传回索引,idx所指的数据,如果idx越界,抛出out_of_range。

a.back() //传回最后一个数据,不检查这个数据是否存在。

a.begin() //传回迭代器中的第一个数据地址。

a.capacity() //返回容器中数据个数。

a.clear() //移除容器中所有数据。

a.empty() //判断容器是否为空。

a.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。

a.erase(pos)  c.erase(beg,end) //删除pos位置的数据,传回下一个数据的位置;删除[beg,end)区间的数据,传回下一个数据的位置。

a.front()  //传回第一个数据。

get_allocator  //使用构造函数返回一个拷贝。

a.insert(pos,elem)  a.insert(pos,n,elem)  a.insert(pos,beg,end) //在pos位置插入一个elem拷贝,传回新数据位置。在pos位置插入n个elem数据。无返回值。在pos位置插入在[beg,end)区间的数据。无返回值。

a.max_size() //返回容器中最大数据的数量。

a.pop_back() //删除最后一个数据。

a.push_back(elem) //在尾部加入一个数据。

a.rbegin() //传回一个逆向队列的第一个数据。

a.rend()//传回一个逆向队列的最后一个数据的下一个位置。

a.resize(num) //重新指定队列的长度。

a.reserve() //保留适当的容量。

a.size() //返回容器中实际数据的个数。

a1.swap(a2)  swap(a1,a2)// 将c1和c2元素互换。

vector<Elem> //创建一个空的vector

cvector<Elem> c1(c2) //复制一个vector

vector <Elem> c(n) //创建一个vector,含有n个数据,数据均已缺省构造产生

vector <Elem> c(n, elem) //创建一个含有n个elem拷贝的vector

vector <Elem> c(beg,end) //创建一个以[beg;end)区间的vector

c.~ vector <Elem>() //销毁所有数据,释放内存

operator[]  //返回容器中指定位置的一个引用。

push_back()//向vector添加一个数据.函数表示将数据添加到vector的尾部,并按需要来分配内存。例如:向vector<Widget>中添加10个数据,

需要如下编写代码:

for(int i= 0;i<10; i++) {

vWidgets.push_back(Widget(i));

}

如果想知道vector存放了多少数据,可以使用empty()。

获取vector的大小,可以使用size()。例如,如果想获取一个vector v的大小,但不知道它是否为空,或者已经包含了数据,如果为空想设置为-1,你可以使用下面的代码实

现:int nSize = v.empty() ? -1 : static_cast<int>(v.size()); 访问vector中的数据

使用两种方法来访问vector。1、 vector::at()   2、 vector::operator[]

operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但

at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。

由于operator[]容易造成一些错误,所有我们很少用它,下面进行验证一下:

分析下面的代码:

vector<int> v;

.reserve(10);

for(int i=0; i<7; i++) {

v.push_back(i); }

try {int iVal1 = v[7];

// not bounds checked - will not throw

int iVal2 = v.at(7);

// bounds checked - will throw if out of range

} catch(const exception& e) {

cout << e.what();

}

删除vector中的数据 vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(),pop_back(),clear()来删除数据,当删除数据时,应该知道要删除尾部的数

据,或者是删除所有数据,还是个别的数据。

Remove_if()算法如果要使用remove_if(),需要在头文件中包含如下代码:#include <algorithm>

Remove_if()有三个参数: iterator _First:指向第一个数据的迭代指针。iterator _Last:指向最后一个数据的迭代指针。predicate _Pred:一个可以对迭代操作的条件函数。

有了vector 不得不说方便了许多,但是程序还需要查找数组元素这个功能,还没有学习数据结构,所以刚开始是想要用遍历每个元素的蠢办法的 结果发现了algorithm 里find()的这个方法

algorithm意为"演算法",是C++的标准模版库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。 写到这里 发现我们其实对c++了解不够深入 就连它的标准模板库有什么

方便的模板函数都不知道 如果能够早些了解 写程序起来比较方便 很多东西其实都可以直接拿来套用 免去了很多代码量...

例:

vector<int> v;

if( find(v.begin(),v.end(),10) == v.end() )
{

cout<<"无此元素“<<endl;

}

经过今天赶代码,发现自己实在是懂得太少,了解的知识量太轻了,还是要时常看看书,大一没学数据结构 也感觉比别人落下了很多 希望今后能好好学习..

vector algorithm find的更多相关文章

  1. STL - vector algorithm

    // create vector with elements from 1 to 6 in arbitrary order vector<, , , , , }; // find and pri ...

  2. effective c++:引用传递与值传递,成员函数与非成员函数

    以pass-by-reference-to-const 替换pass-by-value 考虑以下class继承体系 class Person { public: Person(); // parame ...

  3. 读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数

    1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类.这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口: class WebBrowser { pu ...

  4. Effective C++ —— 设计与声明(四)

    条款18 : 让接口容易被正确使用,不易被误用 欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误操作.  1. 明智而审慎地导入新类型对预防“接口被误用”有神奇疗 ...

  5. Route Loops

    当网络10.4.0.0发生故障时,RouterC检测到故障,并停止其E0接口的路由报文. 然而,路由器A和B还没有收到失败的通知. 路由器A仍然认为可以通过路由器B访问10.4.0.0.路由器A的路由 ...

  6. bzoj2724: [Violet 6]蒲公英 分块 区间众数 论algorithm与vector的正确打开方式

    这个,要处理各个数的话得先离散,我用的桶. 我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[l,r]区间的众数的数只有中间区间的众数和两边的数. 证明:若不是这里的数连区间的众 ...

  7. C++ vector类型要点总结(以及各种algorithm算法函数)

    概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...

  8. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读

    摘要 本文提出了一种用于训练支持向量机的新算法:序列最小优化算法(SMO).训练支持向量机需要解决非常大的二 次规划(QP)优化问题.SMO 将这个大的 QP 问题分解为一系列最小的 QP 问题.这些 ...

  9. Algorithm | Vector

    因为平常用的话只是vector的一些非常简单的功能,基本上把它当数组来用,现在也只是把这一部分写了一些. template<class T> class XVector { public: ...

随机推荐

  1. smarty模板引擎

    1.    使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...

  2. GET和POST区别,http和https区别

    在开发中我们需要和后台进行数据的交互,但是咋样交互呢?通常我们是通过网络请求进行数据的交互,一般使用http/https/tcp/udp等进行数据的交互. http长连接和短连接 1. HTTP协议与 ...

  3. Kanzi编程基础2 - Kanzi节点读取和属性设置

    UI设计师在Kanzi studio把Kanzi的节点做好后,就要编码读取这些节点并根据实际功能去控制刷新它. Kanzi读取节点的api发生过很多次变化,从2.7.2.8到3.0,每次变化都比较大, ...

  4. SQL知识整理二:锁、游标、索引

    锁 锁的模式 锁模式 描述 共享(S) 用于不更改或不更新数据(只读操作),如SELECT语句 更新(U) 用于可更新的资源中.防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式的死锁 ...

  5. CSS 文字两端对齐

    <!DOCTYPE HTML> <html> <head> <title></title> <meta http-equiv=&quo ...

  6. DIV未知宽度高度垂直水平居中

    使用过一种算是相对来说比较好理解一些的吧算是,代码如下: <style> width:800px; height:400px; margin:0 auto; position:absolu ...

  7. 2017 New Year’s Greetings from Sun Yat-sen University

    As winter turns to spring, the world around us begins to take on an air of freshness. As  2017 is fa ...

  8. 阿里im即时通讯 h5 demo

    适合不想装后台环境的同学,用nodejs搭建服务器. 以下是官网提供的node 请求示例: 找到了一个ali-top-sdk 代替topClient 于是请求示例代码如下: TopClient = r ...

  9. HTML5 十大新特性(三)——视频和音频

    一.视频(video) H5新加了video标签,用来播放视频,默认为一个300*150的inline-block. 二.音频(audio) H5新加了audio标签,用来播放音频,默认为一个300* ...

  10. iOS 页面间几种传值方式(属性,代理,block,单例,通知)

    第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...