c++ STL
来源:互联网 发布:js请求servlet 编辑:程序博客网 时间:2024/06/08 17:17
mainly introduce vector's : instructions、implement、thread-safety
vector容器使用较多,记录积累它
instructions
- 基本介绍
#include <vector> //头文件using namespace std; //名空间
vector 存储空间连续;list不连续;
- 初始化
std::vector<std::string> vec_str1; //空的vec,存储string类型vector<string> vec_str2(vec_str1); //使用另一个vec,来初始化新的vecvector<string> vec_str3(10); //创建具有10个空间的vec,但此时没有元素vector<int> vec_int(arr,arr+6);//使用数组,前6个值,初始化vec
- 元素存储及访问
vec_str1.push_back(str1);//尾部存放一个string元素vec_str1.at(INDX); //访问位置INDX处的元素,越界抛异常out of rangevec_str[INDX];//无异常检查//最长用迭代器来访问for (vector<string>::iterator it = vec_str1.begin();it != vec_str1.end(); ++it){ cout << "it->内容:" << *it <<endl;}
- 其它函数介绍
//有意思的应用:当大量删除了vec中元素时,此容器的capcity比较大,但size很小了。造成空间浪费;//如何消除臃肿,释放空间?创建自身拷贝,再和其互换;vector<string> v1;//capcity是100 ,size是2 vector<string> (v1).swap(v1); //v1调整为capcity为2;相当于下面过程:vector<string> v2(v1);// v2 capcity 和 size 都为2v2.swap(v1); //v1的capcity是2 ,V2的capcity是1000;
implement
template<class _Ty, class _Ax> class vector : public _Vector_val<_Ty, _Ax> { // varying size array of valuespublic: /********/protected: pointer _Myfirst; // pointer to beginning of array pointer _Mylast; // pointer to current end of sequence pointer _Myend; // pointer to end of array };

分别对应于resize()、reserve()两个函数。
size表示vector中已有元素的个数,容量表示vector最多可存储的元素的个数;为了降低二次分配时的成本,vector实际配置的大小可能比客户需求的更大一些,以备将来扩充,这就是容量的概念。即capacity>=size,当等于时,容器此时已满,若再要加入新的元素时,就要重新进行内存分配,整个vector的数据都要移动到新内存。二次分配成本较高,在实际操作时,应尽量预留一定空间,避免二次分配
thread-safety
- 结论STL 线程不安全,每次插入,删除,读取元素,保证原子性
来自<< Effective STL >> 条款十二
1、在每次调用容器的成员函数期间都要锁定该容器。
2、在每个容器返回的迭代器(例如通过调用begin或end)的生存期之内都要锁定该容器。
3、在每个在容器上调用的算法执行期间锁定该容器。(这事实上没有意义,因为,正如条款32所解释的,算法没有办法识别出它们正在操作着的容器。不过,我们将在这里检验这个选项,因为它的意义在于看看为什么即使是可能的它也不能工作。)
- 实现线程安全? 参考:http://blog.csdn.net/xsckernel/article/details/52093902
0 0
- 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/C++】STL--pair
- 【C/C++】STL容器
- C++STL-目录
- C++STL-线性结构
- C++STL快速熟悉
- C ++ STL概述
- leetcode-4. Median of Two Sorted Arrays
- ES6 解构赋值学习笔记
- Lua生成比较理想的随机数的方法
- df和du显示的磁盘空间使用情况不一致的原因及处理
- 集合框架-模拟斗地主洗牌和发牌并对牌进行排序案例
- c++ STL
- 最新极光推送在ios模拟器上无法运行
- javascript中对原型的理解
- angularjs 与 ueditor 使用的时候 setContent 报错
- c++ explicit
- JAVA中调用C语言接口
- form表单的两种提交方式,submit和button的用法
- 挑战密室,第八届河南省省赛,郑大OJ10406
- Android 通过JitPack让自己开源库可以被别人引用