STL之vector详解
来源:互联网 发布:java游戏内购破解版 编辑:程序博客网 时间:2024/05/24 00:52
vector用法:
总结了下大家写的,感觉用着很方便;
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
为了可以使用vector,必须在你的头文件中包含下面的代码:
#include <vector>
vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
using std::vector;
vector<int> vInts;
或者连在一起,使用全名:
std::vector<int> vInts;
建议使用全局的命名域方式:
using namespace std;
在后面的操作中全局的命名域方式会造成一些问题。vector容器提供了很多接口,在下面的表中列出vector的成员函数和操作。
Vector成员函数
函数
表述
c.assign(beg,end)
c.assign(n,elem)
将[beg; end)区间中的数据赋值给c。
将n个elem的拷贝赋值给c。
c.at(idx)
传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()
传回最后一个数据,不检查这个数据是否存在。
c.begin()
传回迭代器重的可一个数据。
c.capacity()
返回容器中数据个数。
c.clear()
移除容器中所有数据。
c.empty()
判断容器是否为空。
c.end()
指向迭代器中的最后一个数据地址。
c.erase(pos)
c.erase(beg,end)
删除pos位置的数据,传回下一个数据的位置。
删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()
传回第一个数据。
get_allocator
使用构造函数返回一个拷贝。
c.insert(pos,elem)
c.insert(pos,n,elem)
c.insert(pos,beg,end)
在pos位置插入一个elem拷贝,传回新数据位置。
在pos位置插入n个elem数据。无返回值。
在pos位置插入在[beg,end)区间的数据。无返回值。
c.max_size()
返回容器中最大数据的数量。
c.pop_back()
删除最后一个数据。
c.push_back(elem)
在尾部加入一个数据。
c.rbegin()
传回一个逆向队列的第一个数据。
c.rend()
传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num)
重新指定队列的长度。
c.reserve()
保留适当的容量。
c.size()
返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2)
将c1和c2元素互换。
同上操作。
vector<Elem> c
vector <Elem> c1(c2)
vector <Elem> c(n)
vector <Elem> c(n, elem)
vector <Elem> c(beg,end)
c.~ vector <Elem>()
创建一个空的vector。
复制一个vector。
创建一个vector,含有n个数据,数据均已缺省构造产生。
创建一个含有n个elem拷贝的vector。
创建一个以[beg;end)区间的vector。
销毁所有数据,释放内存。
以下用代码的方式实现:
1 基本操作
(1)头文件#include<vector>.
(2)创建vector对象,vector<int> vec;
(3)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(4)使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
常用函数:
(1)去重:
我们都知道unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除,
不知道这个特性用起来就会出问题。比如下面这个例子,企图输出无重复的元素,
unique只是把重复的元素放到容器的后面,而它本身会返回一个迭代器,只向这些元素的开始部分。因此要向真正删除这些元素,
还是要“手工”处理一下。对于上面的例子,可以用vector窗口的erase
int vector_unique(vector<string> &vt)
{
sort(vt.begin(), vt.end());
vt.erase(unique(vt.begin(), vt.end()), vt.end());
}
(2)C++ Vector排序
vector< int > vi ;
vi.push_back(1);
vi.push_back(3);
vi.push_back(0);
sort(vi.begin() , vi.end()); /// /小到大
reverse(vi.begin(),vi.end()) /// 从大道小
(3)顺序访问
vector < int > vi ;
for( int i = 0 ; i < 10 ; i ++)
{
vector.push_back(i);
}
for(int i = 0 ; i < 10 ; i ++) /// 第一种调用方法
{
cout <<vector[i] <<" " ;
}
for(vector<int>::iterator it = vi.begin() ; it !=vi.end() ; it++) ///第二种调用方法
{
cout << *it << " " ;
}
(4)寻找
vector < int > vi ;
for( int i = 0 ; i < 10 ; i ++)
{
vector.push_back(i);
}
vector < int >::interator it = find(vi.begin() , vi.end,3) ;
cout << *it << endl ; ///返回容器内找到值的位置。
(5) 统计vector向量中指定元素出现的次数:count()算法
int num= count (vector.begin(),vector.end(),100);//统计100出现的次数
(6) count_if():利用函数对象统计满足条件对象的个数
函数对象是一个至少带有一个operator()方法的类。
函数对象被约定为STL算法调用operator时返回true或false,它们根据这个来判定这个函数。
count_if()函数通过传递一个函数对象来做出比count()统计函数更加复杂的评估以确定一个对象是否应该被计数,
即count_if()函数的功能等同于count()函数和一些条件语句。
int num= count_if (vector.begin(),vector.end(),operator());
1 #include<stdio.h> 2 #include<vector> 3 #include<algorithm> 4 int main(){ 5 std::vector<int>vec; 6 std::vector<int>::iterator iter; 7 for(int i=11;i<20;i++)vec.push_back(i); 8 for(int i=11;i<20;i++)vec.push_back(i); 9 for(int i=0;i<20;i++)printf("%d ",vec[i]);//当超过容器的size时答案为0; 10 puts("");printf("当前容器大小为:%d\n",vec.size());11 printf("删除第三个元素:%d\n",vec[2]);vec.erase(vec.begin()+2); 12 for(iter=vec.begin();iter!=vec.end();iter++)printf("%d ",*iter);13 puts("");14 reverse(vec.begin(),vec.end());//反转当前容器中的元素;15 for(int i=0;i<vec.size();i++)printf("%d ",vec[i]); puts("");16 sort(vec.begin(),vec.end());//排序;17 iter=vec.begin();18 while(iter++!=vec.end())printf("%d ",*iter); 19 return 0;20 }
- STL之vector详解
- STL之vector详解
- STL 之vector详解
- Stl详解之vector类
- C++ STL之vector详解
- STL之vector使用详解
- C++ STL之vector详解
- STL之vector容器详解
- C++ STL之vector详解
- C++ STL之vector详解
- C++ STL之vector详解
- C++ STL之vector详解
- STL之vector容器详解
- STL之vector容器详解
- STL之vector容器详解
- STL之vector容器详解
- STL之vector函数详解
- STL之vector容器详解
- hadoop权威指南(第四版)要点翻译(4)——Chapter 3. The HDFS(1-4)
- jquery操作radio和checkbox
- linux上运行jar文件以及打包jar文件的时候遇到的错误
- 查找SQL Server Blocking进程
- adb server is out of date. killing.ADB server didn't ACK* failed to start dae
- STL之vector详解
- NYOJ_64 鸡兔同笼
- Toast Dialog的封装(一)
- gravity和layout_gravity的区别
- 第二章 ARC规则
- 博客访问量记录
- 官方 NSIS 插件全集简单介绍
- Adb connection Error:远程主机强迫关闭了一个现有的连接——解决方法k
- 自己写的DIV+CSS 表单