45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:在STL中使用Vector的步骤

在STL中使用Vector的步骤

2016-08-28 19:21:07 来源:www.45fan.com 【

在STL中使用Vector的步骤

参考 http://dev.csdn.net/article/48/article/48/article/49/49091.shtm

void CVectorTest::ShowInfo(string name,vector<int> & vIntVector)
{
//c.max_size() 返回容器中最大数据的数量。
//c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
//c.capacity() 返回容器中数据个数。
//c.size() 返回容器中实际数据的个数。

cout<<"** "<<name<<endl;
cout<<" Size : "<<vIntVector.size()<<" Capacity: "<<vIntVector.capacity()<<" Max Size : "<<vIntVector.max_size()/(1024*1024)<<"M"<<endl;

for(int index = 0;index<vIntVector.size();index++)
{
//cout<<"Index: "<<index<<" Value: "<<vIntVector[index]<<endl;
}

//iterator——对于除了vector以外的其他任何容器,你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用“++”操作符。而不能使用“--”或“+=”操作符。而对于vector这一种容器,你可以使用“+=”、“—”、“++”、“-=”中的任何一种操作符和“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。
//reverse_iterator ——如果你想用向后的方向而不是向前的方向的游标来遍历除vector之外的容器中的元素,你可以使用reverse_iterator 来反转遍历的方向,你还可以用rbegin()来代替begin(),用rend()代替end(),而此时的“++”操作符会朝向后的方向遍历。
//const_iterator ——一个向前方向的游标,它返回一个常数值。你可以使用这种类型的游标来指向一个只读的值。
//const_reverse_iterator ——一个朝反方向遍历的游
//c.begin() 传回迭代器重的可一个数据。
//c.end() 指向迭代器中的最后一个数据地址。
//c.rbegin() 传回一个逆向队列的第一个数据。
//c.rend() 传回一个逆向队列的最后一个数据的下一个位置。标,它返回一个常数值。
vector<int>::iterator intIterator;
cout <<" Iterator: ";
for (intIterator = vIntVector.begin(); intIterator != vIntVector.end(); intIterator++)
{
cout << *intIterator;
if (intIterator != vIntVector.end()-1)
cout << " , ";
}
cout<<endl;

vector<int>::reverse_iterator intReIterator;
cout <<" Reverse Iterator: ";
for (intReIterator = vIntVector.rbegin(); intReIterator != vIntVector.rend(); intReIterator++)
{
cout << *intReIterator;
if (intReIterator != vIntVector.rend())
cout << " , ";
}
cout<<endl;

//c.front() 传回地一个数据。
//c.back() 传回最后一个数据,不检查这个数据是否存在。
//c.empty() 判断容器是否为空。
if(vIntVector.empty())
{
cout<<"Empty vector."<<endl;
}
else
{
cout<<" First element: "<<vIntVector.front()<<endl;
cout<<" Last element: "<<vIntVector.back()<<endl;
}

}

void CVectorTest::Test()
{
vector<int> Vector0;
for(int i = 20;i<=28;i++)
{
Vector0.push_back(i);
}
ShowInfo("Vector0",Vector0);

//////////////vector中的数据赋值
//vector<Elem> c 创建一个空的vector。
vector<int> Vector1;

//c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。
Vector1.assign(Vector0.begin(),Vector0.end());
ShowInfo("Vector1",Vector1);

//c.assign(n,elem) 将n个elem的拷贝赋值给c。
Vector1.assign(3,5);
ShowInfo("Vector1",Vector1);

///////////// vector的构造
//vector <Elem> c1(c2) 复制一个vector。
vector<int> Vector2(Vector1);
ShowInfo("Vector2",Vector2);

//vector <Elem> c(n) 创建一个vector,含有n个数据,数据均已缺省构造产生。
vector<int> Vector3(6);
ShowInfo("Vector3",Vector3);

//vector <Elem> c(n, elem) 创建一个含有n个elem拷贝的vector。
vector<int> Vector4(4, 8);
ShowInfo("Vector4",Vector4);

//vector <Elem> c(beg,end) 创建一个以[beg;end)区间的vector。
vector<int> Vector5(Vector1.begin()+1,Vector1.end()-1);
ShowInfo("Vector5",Vector5);


//////////////交换两个vector中的元素
//swap(c1,c2) 将c1和c2元素互换。
//swap(c1,c2)同上操作。
Vector2.swap(Vector3) ;
ShowInfo("Vector2",Vector2);
ShowInfo("Vector3",Vector3);

//////////////插入数据
//c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。
Vector2.insert(Vector2.begin() + 1,3) ;
ShowInfo("Vector2",Vector2);

//c.insert(pos,n,elem) 在pos位置插入n个elem数据。无返回值。
Vector2.insert(Vector2.begin() + 1,2,4) ;
ShowInfo("Vector2",Vector2);

//c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。
Vector2.insert(Vector2.begin() + 1,Vector3.begin(),Vector3.end()) ;
ShowInfo("Vector2",Vector2);

/////////////// 增删数据
//c.pop_back() 删除最后一个数据。
//c.push_back(elem) 在尾部加入一个数据
for(i = 0;i<=Vector0.size()-1;i++)
{
Vector0.pop_back();
}
ShowInfo("Vector0",Vector0);
ShowInfo("Vector1",Vector1);

///////////// 删除数据
//c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。
Vector1.erase(Vector1.begin() + 2);
ShowInfo("Vector1",Vector1);

//c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。
Vector1.erase(Vector1.begin() + 1,Vector1.end() - 1);
ShowInfo("Vector1",Vector1);

//c.clear() 移除容器中所有数据。
Vector1.clear();
ShowInfo("Vector1",Vector1);

//////////// 利用交换技巧压缩vector
vector<int>(Vector1).swap(Vector1);
ShowInfo("Vector1",Vector1);

//////////// 改变vector的容积
//reserve(Container::size_type n)强制容器把它的容量改为至少n,提供的n不小于当前大校这一般强迫进行一次重新分配,因为容量需要增加。(如果n小于当前容量,vector忽略它,这个调用什么都不做,string可能把它的容量减少为size()和n中大的数,但string的大小没有改变。
Vector0.reserve(50);
ShowInfo("Vector0",Vector0);

//resize(Container::size_type n)强制把容器改为容纳n个元素。调用resize之后,size将会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部。如果n大于当前容量,在元素加入之前会发生重新分配。
Vector0.resize(2);
ShowInfo("Vector0",Vector0);
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=711605

 

本文地址:http://www.45fan.com/dnjc/68997.html
Tags: 中的 STL Vector
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部