三个容器要数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;//输出当前有多少个1
for (int i = 0; i < bits.size(); i++)
{
cout<<bits[i]<<" ";
}
cout<<endl;
//for (auto x:bits)//无法通过编译
// cout<<x<<" ";
//cout<<endl;
分享到:
相关推荐
c++的STL的vector的一个实现。使用了c++11的大部分特性,包含vector的几乎所有功能。仅作学习之用。
心希盼 c++ STL Vector 类源码 详细说明“心希盼 Vector.doc”
该文档详细讲解了C++中标准容器的使用,是一份不错的学习资料哦
C++STL vector list map set dqueue 等应用举例及PPT讲解示例,代码演示
C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环...
c++ stl 模板函数
C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用库函数总结 C++STL库常用...
微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源代码微软c++ STL源...
C++ STL 教程 涉及泛型编程思想 标准模板 迭代器 泛型算法 容器 等
C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版
c++ STL, stl,stl的学习c++ STL, stl,stl的学习c++ STL, stl,stl的学习c++ STL, stl,stl的学习
STL vector 知识详解 STL vector 知识详解 STL vector 知识详解 STL vector 知识详解 STL vector 知识详解
本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,通过大量的源码分析和应用实例,详细介绍了C++ STL的技术原理和使用方法。...
很详细全面的stl教程,包含非常详细的c++ stl使用教程及编程教学
C++ STL--数据结构与算法实现(余文溪)示例程序代码.rar
仿写C++ STL标准库 vector 源码,可直接在cpp文件中调用实现
包含四个STL笔试、面试题的文档 STL说明.doc STL.doc 三十分钟掌握STL.doc STL面试题.doc
Standard Template Library Programmer's Guide The Standard Template Library, or STL, is a C++ library of container classes, algorithms, and iterators;...你应该确保你了解模板在C++之前你使用STL。
扫描完整版 C++ STL标准程序库开发指南 C++ STL标准程序库开发指南
用stl编写的简易通讯录 ,可以实现简单的增添 删除 查找 等功能