这几天在实习,经理要求用C++MFC做出五子棋的单机版、局域网版、还有网络大厅版本,趁这个机会赶紧复习了C++关于C++的STL小例子如下:标准模板库STL应用举例
向量 vector
线性表 list
队列 queue
映射 map
字符串string
1:向量vector类可用来支持动态数组,动态数组是指可以根据需要改变大小的数组。
可以很容易地声明一个vector类对象,例如:
vector <int> iv;
vector <int> cv(5);
vector <int> cv(5,’x’);
vector <int> iv2(iv);
// Access a vector using an iterator.
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector<char> v; // create zero-length vector
int i;
// put values into a vector
for(i=0; i<10; i++) v.push_back('A' + i);
// can access vector contents using subscripting
for(i=0; i<10; i++) cout << v[i] << " ";
cout << endl;
// access via iterator
vector<char>::iterator p = v.begin( );
while(p != v.end()) {
cout << *p << " ";
p++;
}
return 0;
}
2:
线性表 list 类定义了双向的线性表, 又可称为双向链表。List类只支持顺序访问。
下面的C++程序通过实例化链表list类模板建立了一个保存字符的链表,接着使用类模板的排序方法sort( )进行排序,然后输出经过排序后的字符。
// Sort a list.
#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;
int main()
{ int i;
list<char> lst;
// create a list of random characters
for(i=0; i<10; i++)
lst.push_back('A'+ (rand()%26));
cout << "Original contents: ";
list<char>::iterator p = lst.begin();
while(p != lst.end()) {
cout << *p;
p++;
}
cout << endl << endl;
// sort the list
lst.sort( );
cout << "Sorted contents: ";
p = lst.begin();
while(p != lst.end()) {
cout << *p;
p++;
}
return 0;
}
3:
映射map类定义了一个关联容器,并且在容器中使用唯一的关键字来映射相应的值。
map类对象是一系列关键字/值的匹配对。
map的功能在于:只要知道了一个值的关键字,就可以找到这个值。
下面的实例程序通过实例化标准库中的map类模板映射建立了一些英文单词与其反义词的对应关系,利用这种对应系可以迅速查找到一个词的反义词。
// A map of word opposites, using strings.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main( )
{ int i;
map<string, string> m;
m.insert(pair<string, string>("yes", "no"));
m.insert(pair<string, string>("up", "down"));
m.insert(pair<string, string>("left", "right"));
m.insert(pair<string, string>("good", "bad"));
string s;
cout << "Enter word: ";
cin >> s;
map<string, string>::iterator p;
p = m.find(s);
if(p != m.end())
cout << "Opposite: " << p->second;
else
cout << "Word not in map.\n";
return 0;
}
4:
队列(queue)是一个先进先出(FIFO: First In First Out)的数据结构,在程序设计中经常使用。
对一个队列常用的操作有,在队列尾增加一个元素、在队列头取一个元素以及测试队列是否为空、是否为满等操作。
Using queue class in the Standard C++ Library, Instantiate a queue for strings and demonstrate the following functions in main( ) to show that you know how to use this class:
queue::push( )
queue::pop( )
queue::empty( )
queue::front( )
queue::back( )
queue::size( )
#include <iostream>
#include <queue>
#include <string>
using namespace std;
void main( )
{queue<string> str_queue;
str_queue.push("string1");
str_queue.push("string2");
str_queue.push("string3");
cout<<"the size of the queue is: "<<str_queue.size()<<endl;
cout<<"the front one "<<str_queue.front()<<endl;
cout<<"the back one "<<str_queue.back()<<endl;
str_queue.pop( );
str_queue.pop( );
str_queue.pop( );
if (str_queue.empty( ))
cout<<" the queue is empty!"<<endl;
}
5:
C++提供了两种处理字符串的方法:
以空字符‘\0’结尾的字符数组
容器类string类的对象(标准库中的string类)
使用标准库中的string类的三个理由:
一致性(字符串定义为一种数据类型)
方便性(可以使用标准的运算符)
安全性(不会出现数组越界错误)
// Demonstrate insert(), erase(), and replace().
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1("This is a test");
string str2("ABCDEFG");
cout << "Initial strings:\n";
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << "\n\n";
// demonstrate insert()
cout << "Insert str2 into str1:\n";
str1.insert(5, str2);
cout << str1 << "\n\n";
// demonstrate erase()
cout << "Remove 7 characters from str1:\n";
str1.erase(5, 7);
cout << str1 <<"\n\n";
// demonstrate replace
cout << "Replace 2 characters in str1 with str2:\n";
str1.replace(5, 2, str2);
cout << str1 << endl;
return 0;
}
结果:
Initial strings:
str1: This is a test
str2: ABCDEFG
Insert str2 into str1:
This ABCDEFGis a test
Remove 7 characters from str1:
This is a test
Replace 2 characters in str1 with str2:
This ABCDEFG a test