大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > C++ Vector用法

C++ Vector用法(2)

关键词:C++Vector  阅读(1120) 赞(19)

[摘要]本文是对C++ Vector用法的讲解,与大家分享。

3.用swap方法强行释放STL Vector所占内存

template < class T> void ClearVector( vector<T>& v )
{ 
    vector<T> vtTemp;
    vtTemp.swap( v );
} 

vector<int> v ;
    nums.push_back(1);
    nums.push_back(3);
    nums.push_back(2);
    nums.push_back(4);
    vector<int>().swap(v);

/* 或者v.swap(vector<int>()); */

/*或者{ std::vector<int> tmp = v;   v.swap(tmp);   }; //加大括号{ }是让tmp退出{ }时自动析构*/

五、Vector 内存管理成员函数的行为测试
C++ STL的vector使用非常广泛,但是对其内存的管理模型一直有多种猜测,下面用实例代码测试来了解其内存管理方式,测试代码如下:

 #include <iostream>
 #include <vector>
 using namespace std;
 
 int main()
 {
 vector<int> iVec;
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //1个元素, 容器容量为1
 
 iVec.push_back(1);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //2个元素, 容器容量为2
 
 iVec.push_back(2);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //3个元素, 容器容量为4
 
 iVec.push_back(3);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //4个元素, 容器容量为4
 
 iVec.push_back(4);
 iVec.push_back(5);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //5个元素, 容器容量为8
 
 iVec.push_back(6);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //6个元素, 容器容量为8
 
 iVec.push_back(7);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //7个元素, 容器容量为8
 
 iVec.push_back(8);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //8个元素, 容器容量为8
 
 iVec.push_back(9);
 cout << "容器 大小为: " << iVec.size() << endl;
 cout << "容器 容量为: " << iVec.capacity() << endl; //9个元素, 容器容量为16
 /* vs2005/8 容量增长不是翻倍的,如 
     9个元素   容量9 
     10个元素 容量13 */
 
 /* 测试effective stl中的特殊的交换 swap() */
 cout << "当前vector 的大小为: " << iVec.size() << endl;
 cout << "当前vector 的容量为: " << iVec.capacity() << endl;
 vector<int>(iVec).swap(iVec);
 
 cout << "临时的vector<int>对象 的大小为: " << (vector<int>(iVec)).size() << endl;
 cout << "临时的vector<int>对象 的容量为: " << (vector<int>(iVec)).capacity() << endl;
 cout << "交换后,当前vector 的大小为: " << iVec.size() << endl;
 cout << "交换后,当前vector 的容量为: " << iVec.capacity() << endl;
 
 return 0;
 }

六、vector的其他成员函数

c.assign(beg,end)
将[beg; end)区间中的数据赋值给c。beg和end是迭代器变量
c.assign(n,elem)
将n个elem的拷贝赋值给c。
c.at(idx)
传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()
传回最后一个数据,不检查这个数据是否存在。
c.front()
传回第一个数据。
get_allocator
使用构造函数返回一个拷贝。
c.rbegin()
传回一个逆向队列的第一个数据。
c.rend()
传回一个逆向队列的最后一个数据的下一个位置。
c.~ vector <Elem>()
销毁所有数据,释放内存。

«上一页12下一页»


相关评论