//例子引自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向量允许的最大空间是多少,从上面可以看出反正是不同的,呵呵~