Vector示例一,二

#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;

就可以避免错误。

时间: 2024-12-22 14:01:48

Vector示例一,二的相关文章

OpenCV 入门示例之二:播放 AVI 视频

前言 本文展示一个播放 AVI 视频的程序.( 呵呵是 AVI 视频不是 AV 视频噢! ) 代码示例 OpenCV 入门示例之二:播放 AVI 视频,布布扣,bubuko.com

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

用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int main(){ int m, //行数     n; //列数 cout << "input value for m,n:"; cin>>m>>n;  //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认

用vector代替实现二维数组

vector可以用来模拟数组,当然也可以用来模拟二维数组: 定义如:vector<int>a[100];   相当于定义了一个100行的数组,当每行的大小是不确定的 模板应用如下: #include <stdio.h> #include <vector> #include <algorithm> using namespace std; int main() { vector<int>a[100]; vector<int>::iter

WCF学习之旅—第三个示例(二十七)

一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书籍管理系统(BookMgr). 这个示例就是一个非常简单的书籍管理系统,功能有:查询.修改.新增.删除(不包括安全.优化等相关问题).异常处理.WCF的增删改查和WinForm相差无几.WCF只是把具体“实现”写在“服务端”,而“调用”放在了“客户端”. 二.BookMgr说明 1)Demo的 “服

STL vector的使用(二)

一. vector 迭代器: 除了使用下标来访问vector对象的元素外,标准库还提供了访问元素的方法:使用迭代器.迭代器是一种检查容器内元素并且遍历元素的数据类型. 1. 容器的iterator类型: vector<int> ::iterator it; 2. begin和end操作 begin 返回的元素指向第一个元素 end 返回的迭代器指向最后一个元素的下一个 vector<int>::iterator iter=v.begin(); 举例:将vector中的元素全部赋值为

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

[抄题]: Implement an iterator to flatten a 2d vector. Example: Input: 2d vector = [ [1,2], [3], [4,5,6] ] Output: [1,2,3,4,5,6] Explanation: By calling next repeatedly until hasNext returns false,   the order of elements returned by next should be: [1,

Go语言之并发示例-Pool(二)

针对这个资源池管理的一步步都实现了,而且做了详细的讲解,下面就看下整个示例代码,方便理解. package commonimport (     "errors"     "io"     "sync"     "log")//一个安全的资源池,被管理的资源必须都实现io.Close接口type Pool struct {     m       sync.Mutex     res     chan io.Closer   

pyspider示例代码二:解析JSON数据

本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉.pyspider示例代码官方网站是http://demo.pyspider.org/.上面的示例代码太多,无从下手.因此本人找出一下比较经典的示例进行简单讲解,希望对新手有一些帮助. 示例说明: pyspider爬取的内容通过回调的参数response返回,response有多种解析方式.1.response.json用于解析json数据2.response.doc返回的是PyQuery对象3.response.etree返回的

构建施耐德楼控系统数据库后台服务器示例工程二(数据库查询编写)

构建施耐德楼控系统数据库后台服务器示例工程-(工程创建)记录了一个Spring.Hibernate.Rest的工程如何创建,这篇将简单介绍在这个框架下如何利用注释编程. 1.Spring注释 Spring为我们提供了@Service.@Autowired这些标注来让工程中的Bean自动创建. 在我们的框架中,我们需要为每一个需要被其他类调用到的类名前添加@Service标签,在需要被自动创建的成员类上添加@Autowired,这样程序在运行时Spring会为我们自动装配相关的类实例. 2.Res