//例子引自c++标准程序库P157页,见有会员问,我还硬是把这些代码重新敲了一次,最近也在自学stl,就当练习一下,注释全部翻译成中文了,希望能够帮到你

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
 vector<string> vt;
 vt.reserve(5);//保留5个元素的内存作为后面插入元素使用
 vt.push_back("hello,");
 vt.push_back("welcome ");
 vt.push_back("to");
 vt.push_back("our www.cctry.com");
 vt.push_back("~");//插入5个元素

 copy(vt.begin(),vt.end(),ostream_iterator<string>(cout," "));//将向量的开始到结束位置所有的元素输出,并用空格间隔
 cout<<endl;

 cout<<"max_size(): "<<vt.max_size()<<endl;//向量最大能够容纳的元素个数
 cout<<"size(): "<<vt.size()<<endl;//返回当前向量中有多少个元素
 cout<<"capacity(): "<<vt.capacity()<<endl;//返回重新分配空间前所能容纳的元素个数

 swap(vt[1],vt[3]);//交换向量中第2与第4个元素

 vt.insert(find(vt.begin(),vt.end(),"~"),"boys");//在!之前插入一个元素you
 vt.back()="!";//将向量中最后一个元素从!改为!!!,相当于用assign()函数将最后一个元素重新赋值

 copy(vt.begin(),vt.end(),ostream_iterator<string>(cout," "));//将向量的开始到结束位置所有的元素输出,并用空格间隔
 cout<<endl;
 cout<<"size(): "<<vt.size()<<endl;//返回当前向量中有多少个元素
 cout<<"capacity(): "<<vt.capacity()<<endl;//测试capacity()这个函数,跟前面那个对比
}

vc6.0下测试结果为:

hello, welcome  to our http://2smt.org.ru ~
max_size(): 268435455
size(): 5
capacity(): 5
hello, our http://2smt.org.ru to welcome  boys !
size(): 6
capacity(): 10
Press any key to continue

注:书上说,max_size()和capasity()的结果由实作版本决定(这里的实作怎么理解呢?我把它理解为在用不同的编译器编译时,它是根据编译器的处理方式来决定的,下面有例子),从这个例子上看,当容量不足时,此一实作版本会将容量扩充一倍,所以输出为10;

 

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
 vector<string> vt;
 vt.reserve(5);//保留5个元素的内存作为后面插入元素使用
 vt.push_back("hello,");
 vt.push_back("welcome ");
 vt.push_back("to");
 vt.push_back("our http://2smt.org.ru");
 vt.push_back("~");//插入5个元素

 //copy(vt.begin(),vt.end(),ostream_iterator<string>(cout," "));//将向量的开始到结束位置所有的元素输出,并用空格间隔
 cout<<endl;

 cout<<"max_size(): "<<vt.max_size()<<endl;//向量最大能够容纳的元素个数
 cout<<"size(): "<<vt.size()<<endl;//返回当前向量中有多少个元素
 cout<<"capacity(): "<<vt.capacity()<<endl;//返回重新分配空间前所能容纳的元素个数

 swap(vt[1],vt[3]);//交换向量中第2与第4个元素

 vt.insert(find(vt.begin(),vt.end(),"~"),"boys");//在!之前插入一个元素you
 vt.back()="!";//将向量中最后一个元素从!改为!!!,相当于用assign()函数将最后一个元素重新赋值

 //copy(vt.begin(),vt.end(),ostream_iterator<string>(cout," "));//将向量的开始到结束位置所有的元素输出,并用空格间隔
 cout<<endl;
 cout<<"capacity(): "<<vt.capacity()<<endl;//测试capacity()这个函数,跟前面那个对比
 system("pause");
 return 0;
}

dev-c++下测试结果为:


max_size(): 1073741823
size(): 5
capacity(): 5

capacity(): 10
请按任意键继续. . .

注:由于在dev-c++下测试时会出现ostream_iterator' undeclared (first use this function) 我就把这两行注释掉了,反正上面的例子已经可以看出现象了,只是想看看这个max_size()函数在不同的编译器对vector向量允许的最大空间是多少,从上面可以看出反正是不同的,呵呵~

posted on 2010-04-13 22:10  蓝牙  阅读(276)  评论(0编辑  收藏  举报