您的位置:首页 > 编程语言

STL 代码示例整理(1)

2016-12-08 11:33 357 查看
1:vector

#include <vector>
#include <iostream>
using namespace std;

char* szHW = "Hello World";

int main(int argc, char* argv[])
{
vector <char> vec;
vector <char>::iterator vi;

char* cptr = szHW;  // 将一个指针指向“Hello World”字符串
while (*cptr != '\0')
{
vec.push_back(*cptr);
cptr++;
}
for (vi=vec.begin(); vi!=vec.end(); vi++)
{
cout << *vi;
}
cout << endl;
return 0;
}


STL中的向量是怎样初始化的。

#include <cstring>
#include <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;
}


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

#include <cstring>
#include <vector>
#include <iostream>
using namespace std;

char* szHW = "Hello World";
int main(int argc, char* argv[])
{
vector <char> vec(strlen(sHW)); //为向量分配内存空间
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;
}


2:STL中的集合(set)

#include <string>
#include <set>
#include <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

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

3:在map中怎样使用自定义的类。

#include <string>
#include <iostream>
#include <vector>
#include <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;
}


4:测试分数统计

#include <algorithm> :
#include <numeric> // 包含accumulate(求和)函数的头文件
#include <vector>
#include <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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐