#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. ios获取远程json数据

    NSMutableArray *arr; arr = [[NSMutableArray alloc]init];//全局 NSURL *url = [NSURL URLWithString:@&quo ...

  2. jQuery .tmpl() 用法

    动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...

  3. wifidog源码分析 - 初始化阶段

    Wifidog是一个linux下开源的认证网关软件,它主要用于配合认证服务器实现无线路由器的认证放行功能. wifidog是一个后台的服务程序,可以通过wdctrl命令对wifidog主程序进行控制. ...

  4. 为Form中的控件增加自适应功能 转

    创建一个基于Custom的类resizeable,并新建属性和方法程序,其说明如下: a) 新建属性: posiTyperList 可调整位置的控件类型列表sizeTypeList 可调整大小的控件类 ...

  5. POJ 2549

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8235   Accepted: 2260 Descripti ...

  6. POJ 1470 Closest Common Ancestors (最近公共祖先LCA 的离线算法Tarjan)

    Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...

  7. iOS模型以及使用

    个人习惯,也可以不这样写 创建模型基类: #import <Foundation/Foundation.h> @interface WJBaseModel : NSObject //将字典 ...

  8. (转)android ListView详解

    转自:  http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 在android开发中ListView是比较常用的组件,它以列表的形 ...

  9. poj 2762(强连通+判断链)

    题目链接:http://poj.org/problem?id=2762 思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最 ...

  10. ANDROID STUDIO, GRADLE AND NDK INTEGRATION

    Originally posted on:http://ph0b.com/android-studio-gradle-and-ndk-integration/ With the recent chan ...