C++ STL vector, valarray, 和bitSet使用方法对比
来源:互联网 发布:进口数据查询 编辑:程序博客网 时间:2024/06/17 02:06
三个容器要数vector是最常用的了,但是什么时候应该使用其他容器呢?下面看看他们的用法比较。
初始化:
int b[] = {1,2,3};valarray<int> var(b,b+3);//编译不通过vector<int> vec(b,b+3);//正确赋值方式bitset<16> bits(20);//20转换成2进制存储进bitset容器中
valarray并不是一个标准的stl容器,因为它本身没有iterators,这就是为什么上面它不可以想vector那样初始化。
尽量不要使用vector<bool>这样的容器。
下面程序最后一句是不能通过编译的。
vector<bool> arr;arr.push_back(1);arr.push_back(0);for (auto x:arr){cout<<x<<endl;}bool *ptr = &arr[0];//编译不能通过
因为&arr[]返回的是使用代理类型,而不是指针地址。
但是下面代码却是可行的:
valarray<bool> valarr(1,2);bool *ptr = &valarr[0];//可行cout<<*ptr<<endl;//打印1
但是这个问题,使用bitset也是无法通过编译的:
bitset<16> bits(8);bool *ptr1 = &bits[0];//不能通过编译
valarray是用来存储一个数列,可以快速地作数学操作的,如果需要对数列,尤其正数列所有元素作数学操作,那么就应该选择valarray.如下面的程序:
valarray<int> valarr(10,2);valarray<int>::value_type rval = 10;valarr *= rval;//可行vector<int> veci(10,2);vector<int>::value_type vval = 20;veci *= vval;//不可行,无法通过编译。
注意valarray和vector两个参数的初始化的结果也是不一样的,如下面程序:
valarray<int> valarr(10,2);for (auto x:valarr)cout<<x<<" ";cout<<endl;vector<int> veci(10,2);for (auto x:veci)cout<<x<<" ";cout<<endl;
同样的参数(10,2),valarray代表2个10,而vector就代表是10个2.
bitset是不支持for (auto x:bits)这样的语句的,而且初始化就是把一个整数转换为二进制,和valarray,vector的初始化都大不一样。
如下面程序:
vector<int> veci(10,2);for (auto x:veci)cout<<x<<" ";cout<<endl;bitset<16> bits(20);cout<<bits.size()<<endl;//输出当前的容量cout<<bits.count()<<endl;//输出当前有多少个1for (int i = 0; i < bits.size(); i++){cout<<bits[i]<<" ";}cout<<endl;//for (auto x:bits)//无法通过编译//cout<<x<<" ";//cout<<endl;
- C++ STL vector, valarray, 和bitSet使用方法对比
- C++STL bitset介绍与使用方法
- stl valarray
- C++:STL之vector,deque对比
- C++STL vector介绍与使用方法
- C++STL库 vector map list 使用方法
- STL中的vector和deque对比
- C++/STL Bitset
- C++/STL bitset
- C++/STL bitset
- 动态数组对比STL vector及其实现(c/c++)
- C++/STL Bitset (转)
- C++/STL Bitset (转)
- C++/STL Bitset (转)
- [C++] STL (Algorithm,bitset)
- C++/STL Bitset (转)
- C++/STL Bitset (转)
- vector和bitset使用例子
- java线程之join方法
- c/c++ 类中的成员变量声明时请优先考虑一下排列次序
- iBATIS 三个版本小细节对比
- java 基础知识3-变量初始化
- Android中的WebView禁止响应点击事件的方法
- C++ STL vector, valarray, 和bitSet使用方法对比
- C++易错
- osql 命令 sqlserver 2008 登录无法打开默认数据库
- ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
- linux zip cmd
- jqgrid右键菜单实现
- Java使用POI实现数据导出excel报表
- 实现wordpress路由功能
- 【自由谈】城域网IPv6过渡技术——NAT64+DNS64