#include <iostream>

int main(void)

{

double a[] = {1, 2, 3, 4, 5};

std::cout<<mean(a, 5)<<std::endl; // will print 3

return 0;

}

//vector

#include <vector>

#include <iostream>

int main()

{

std::vector<double> a;

a.push_back(1);

a.push_back(2);

a.push_back(3);

a.push_back(4);

a.push_back(5);

for(int i = 0; i < a.size(); ++i)

{

std::cout<<a[i]<<std::endl;

}

return 0;

}

#include <vector>

#include <iostream>

int main()

{

std::vector< int > q;

q.push_back(10);

q.push_back(11);

q.push_back(12);

std::vector< int > v;

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

v.push_back(i);

}

std::vector<int>::iterator it = v.begin() + 1;

it = v.insert(it, 33);

v.insert(it, q.begin(), q.end());

it = v.begin() + 3;

v.insert(it, 3, -1);

it = v.begin() + 4;

v.erase(it);

it = v.begin() + 1;

v.erase(it, it + 4);

v.clear();

return 0;

}

//程序:vector演示一

//目的:理解STL中的向量

// #i nclude "stdafx.h" -如果你使用预编译的头文件就包含这个头文件

#i nclude <vector> // STL向量的头文件。这里没有".h"。

#i nclude <iostream> // 包含cout对象的头文件。

using namespace std; //保证在程序中可以使用std命名空间中的成员。

char* szHW = "Hello World";

//这是一个字符数组,以"\0"结束。

int main(int argc, char* argv[])

{

vector <char> vec; //声明一个字符向量vector (STL中的数组)

//为字符数组定义一个游标iterator。

vector <char>::iterator vi;

//初始化字符向量,对整个字符串进行循环,

//用来把数据填放到字符向量中,直到遇到"\0"时结束。

char* cptr = szHW; // 将一个指针指向"Hello World"字符串

while (*cptr != '\0')

{ vec.push_back(*cptr); cptr++; }

// push_back函数将数据放在向量的尾部。

// 将向量中的字符一个个地显示在控制台

for (vi=vec.begin(); vi!=vec.end(); vi++)

// 这是STL循环的规范化的开始——通常是 "!=" ,而不是 "<"

// 因为"<" 在一些容器中没有定义。

// begin()返回向量起始元素的游标(iterator),end()返回向量末尾元素的游标(iterator)。

{ cout << *vi; } // 使用运算符"*"将数据从游标指针中提取出来。

cout << endl; // 换行

return 0;

}

//程序:初始化演示

//目的:为了说明STL中的向量是怎样初始化的。

#i nclude <cstring> // <cstring>和<string.h>相同

#i nclude <vector>

using namespace std;

int ar[10] = { 12, 45, 234, 64, 12, 35, 63, 23, 12, 55 };

char* str = "Hello World";

int main(int argc, char* argv[])

{

vector <int> vec1(ar, ar+10);

vector <char> vec2(str, str+strlen(str));

return 0;

}

//程序:vector演示二

//目的:理解带有数组下标和方括号的STL向量

#i nclude <cstring>

#i nclude <vector>

#i nclude <iostream>

using namespace std;

char* szHW = "Hello World";

int main(int argc, char* argv[])

{

vector <char> vec(strlen(szHW)); //为向量分配内存空间

int i, k = 0;

char* cptr = szHW;

while (*cptr != '\0')

{ vec[k] = *cptr; cptr++; k++; }

for (i=0; i<vec.size(); i++)

{ cout << vec[i]; }

cout << endl;

return 0;

}

//set

/*这是微软帮助文档中对集合(set)的解释:"描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分量)的模板类,每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效。"

而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。

下面是一个例子:

*/

//程序:set演示

//目的:理解STL中的集合(set)

#i nclude <string>

#i nclude <set>

#i nclude <iostream>

using namespace std;

int main(int argc, char* argv[])

{

set <string> strset;

set <string>::iterator si;

strset.insert("cantaloupes");

strset.insert("apple");

strset.insert("orange");

strset.insert("banana");

strset.insert("grapes");

strset.insert("grapes");

for (si=strset.begin(); si!=strset.end(); si++)

{ cout << *si << " "; }

cout << endl;

return 0;

}

// 输出: apple banana cantaloupes grapes orange

//注意:输出的集合中的元素是按字母大小顺序排列的,而且每个值都不重复。

//如果你感兴趣的话,你可以将输出循环用下面的代码替换:

copy(strset.begin(), strset.end(), ostream_iterator<string>(cout, " "));

//map

//程序:映射自定义的类。

//目的:说明在map中怎样使用自定义的类。

#i nclude <string>

#i nclude <iostream>

#i nclude <vector>

#i nclude <map>

using namespace std;

class CStudent

{

public :

int nStudentID;

int nAge;

public :

//缺省构造函数——通常为空

CStudent() { }

// 完整的构造函数

CStudent(int nSID, int nA) { nStudentID=nSID; nAge=nA; }

//拷贝构造函数

CStudent(const CStudent& ob)

{ nStudentID=ob.nStudentID; nAge=ob.nAge; }

// 重载"="

void operator = (const CStudent& ob)

{ nStudentID=ob.nStudentID; nAge=ob.nAge; }

};

int main(int argc, char* argv[])

{

map <string, CStudent> mapStudent;

mapStudent["Joe Lennon"] = CStudent(103547, 22);

mapStudent["Phil McCartney"] = CStudent(100723, 22);

mapStudent["Raoul Starr"] = CStudent(107350, 24);

mapStudent["Gordon Hamilton"] = CStudent(102330, 22);

// 通过姓名来访问Cstudent类中的成员

cout << "The Student number for Joe Lennon is " <<

(mapStudent["Joe Lennon"].nStudentID) << endl;

return 0;

}

//Algorithms

sort(vec.begin()+1, vec.end()-1)可以实现对除第一个和最后一个元素的其他元素的排序操作。

//程序:测试分数统计

//目的:通过对向量中保存的分数的操作说明怎样使用算法

#i nclude <algorithm> //如果要使用算法函数,你必须要包含这个头文件。

#i nclude <numeric> // 包含accumulate(求和)函数的头文件

#i nclude <vector>

#i nclude <iostream>

using namespace std;

int testscore[] = {67, 56, 24, 78, 99, 87, 56};

//判断一个成绩是否通过了考试

bool passed_test(int n)

{

return (n >= 60);

}

// 判断一个成绩是否不及格

bool failed_test(int n)

{

return (n < 60);

}

int main(int argc, char* argv[])

{

int total;

// 初始化向量,使之能够装入testscore数组中的元素

vector <int> vecTestScore(testscore,

testscore + sizeof(testscore) / sizeof(int));

vector <int>::iterator vi;

// 排序并显示向量中的数据

sort(vecTestScore.begin(), vecTestScore.end());

cout << "Sorted Test Scores:" << endl;

for (vi=vecTestScore.begin(); vi != vecTestScore.end(); vi++)

{ cout << *vi << ", "; }

cout << endl;

// 显示统计信息

// min_element 返回一个 _iterator_ 类型的对象,该对象指向值最小的那个元素。

//"*"运算符提取元素中的值。

vi = min_element(vecTestScore.begin(), vecTestScore.end());

cout << "The lowest score was " << *vi << "." << endl;

//与min_element类似,max_element是选出最大值。

vi = max_element(vecTestScore.begin(), vecTestScore.end());

cout << "The highest score was " << *vi << "." << endl;

// 使用声明函数(predicate function,指vecTestScore.begin()和vecTestScore.end())来确定通过考试的人数。

cout << count_if(vecTestScore.begin(), vecTestScore.end(), passed_test) <<

" out of " << vecTestScore.size() <<

" students passed the test" << endl;

// 确定有多少人考试挂了

cout << count_if(vecTestScore.begin(),

vecTestScore.end(), failed_test) <<

" out of " << vecTestScore.size() <<

" students failed the test" << endl;

//计算成绩总和

total = accumulate(vecTestScore.begin(),

vecTestScore.end(), 0);

// 计算显示平均成绩

cout << "Average score was " <<

(total / (int)(vecTestScore.size())) << endl;

return 0;

}

一些建议

为了避免在调试模式(debug mode)出现恼人的警告,使用下面的编译器命令:

#pragma warning(disable: 4786)

另一条需要注意的是,你必须确保在两个尖括号之间或尖括号和名字之间用空格隔开,因为是为了避免同">>"移位运算符混淆。比如

vector <list<int>> veclis;

这样写会报错,而这样写:

vector <list <int> > veclis;

就可以避免错误。

Vector示例一,二的更多相关文章

  1. WCF学习之旅——第一个WCF示例(二)

    第四步:通过自我寄宿的方式寄宿服务 WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程.WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段. 终 ...

  2. SharePoint 2013 APP 开发示例 (二)获取用户信息

    SharePoint 2013 APP 开发示例 (二)获取用户信息 这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的  SharePo ...

  3. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  4. C++ vector迭代器访问二维数组

    #include<iostream> #include<vector> int main(){ std::vector<int> arr(); // 创建一维数组 ...

  5. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  6. 251. Flatten 2D Vector 平铺二维矩阵

    [抄题]: Implement an iterator to flatten a 2d vector. Example: Input: 2d vector = [ [1,2], [3], [4,5,6 ...

  7. UWP简单示例(二):快速开始你的3D编程

    准备 IDE:Visual Studio 开源库:GitHub.SharpDx 入门示例:SharpDX_D3D12HelloWorld 为什么选择 SharpDx? SharpDx 库与 UWP 兼 ...

  8. vector 定义的二维数组的遍历

    之前我们分享了STL的一些容器,再介绍vector中只介绍了二维的vector的定义并没有说二维的vector怎么遍历,那么我们今天就来看下二维的vector怎么遍历 看下面的代码吧. #includ ...

  9. 用vector代替实现二维数组

    vector可以用来模拟数组,当然也可以用来模拟二维数组: 定义如:vector<int>a[100];   相当于定义了一个100行的数组,当每行的大小是不确定的 模板应用如下: #in ...

随机推荐

  1. JS设计模式——5.单体模式

    JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html   单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...

  2. https+ssl详解

    这是转载别人的写的很好,(转:崔永秀) 把这几天学习到的关于ssl和https协议的内容在这里分享一下,适合一些像我一样的网络协议初学者. ssl协议的起源和历史我就不再多说了,就是那个Netscap ...

  3. 异步JS:$.Deferred的使用

    异步JS:$.Deferred的使用 原文链接:http://www.html5rocks.com/en/tutorials/async/deferred/ 当我们构建一个平稳的,响应式的HTML5应 ...

  4. Android Environment FAQ (Frequently Asked Question)

    1.how to find out the Eclipse Version From Eclipse Menu Help ----> About Eclipse It displayed as ...

  5. JavaScript js 精确、保留小数方法

    //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x); if (isNaN(f)) { return ...

  6. sql脚本太大无法打开的解决办法

    在sqlcmd中执行脚本文件的方法有2种: 方法1.在DOS中,可以调用sqlcmd命令,并用选项-i传入想要执行的文件名: sqlcmd -S "这里改成你的服务器名称" -U  ...

  7. poj 1704

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7233   Accepted: 2173 D ...

  8. H5+ and mui学习记录

    基础 1.H5+ 定义实现了一些调用原生方法的对象 2.其他的原生方法可以通过Native.js调用 webview 3.webview是调用原生界面的H5+对象 4.单个webview只承载单个页面 ...

  9. .bash_profile和.bashrc的区别(如何设置生效)

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  10. javascript console

    javascript console console.log(object[, object, ...])在控制台输出一条消息.如果有多个参数,输出时会用空格隔开这些参数. 第一个参数可以是一个包含格 ...