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