C++实践积累
来源:互联网 发布:mac office2016密钥 编辑:程序博客网 时间:2024/06/03 16:37
C++11新用法
遍历容器不同方法
C++引入了一种更简单的for语句, 这种语句可以更简洁遍历初始值列表、数组、容器、string等类型的对象,这些对象的公共特点是都有返回迭代器的begin与end成员。
主要形式,如下:
for (auto &element : vector) { statement;}
其中
- auto用来确定容器中元素的类型,不仅可以用在for中,也可以用在其它位置用来确定定义的变量类型,如:auto it = vector.begin() 这样写可以比较简洁
- 如果需要改写容器中元素内容比较在element前加引用型&
以下代码为遍历一个容器或者数组或者string的所有方式:
int array[] = {2, 4, 6, 8}; vector<int> vec(array, array + 4); string str = "I am good student"; cout<<endl<<"method1: iterator"<<endl; for (vector<int>::iterator it = vec.begin(); it < vec.end(); ++it) { cout<<*it<<" "; } cout<<endl<<"method2: index"<<endl; for (vector<int>::size_type id = 0; id < vec.size(); ++id) { cout<<vec[id]<<" "; } cout<<endl<<"method3: auto type"<<endl; //sometimes, you need iterator traverse while simple code for (auto it = vec.begin(); it < vec.end(); ++it) { cout<<*it<<" "; } cout<<endl<<"method4: auto for"<<endl; //use & for writing element to vector for (auto item : vec) { cout<<item<<" "; } cout<<endl<<"method5: auto for to traverse array"<<endl; for (auto item : array) { cout<<item<<" "; } cout<<endl; for (auto item : {1, 3, 5, 7}) { cout<<item<<" "; } cout<<endl<<"method6: auto for to traverse string"<<endl; for (auto c : str) { cout<<c; }
C++ STL
vector
如何彻底清空一个vector?
实践证明,vector.clear()并不能把vector容量清空,只会让vector.size()变为零,依然很占内存。那如何让vector的capacity变为0呢?
vector<int> nums(500);nums.clear();cout<<"size after clear:"<<nums.size()<<endl;cout<<"capacity after clear:"<<nums.capacity()<<endl;nums = vector<int>();cout<<"capacity after from new vector:"<<nums.capacity()<<endl;
输出结果:
string
substr
s.substr(start, nums); //从下标为start的元素开始,取nums个数。注意:nums表示所取字符个数,而不结尾字符的下标。s.substr(start); //从下标为start的元素开始,取到s的结尾
列如,
string str="We think in generalities, but we live in details.";string str2 = str.substr (3,5); // "think"string str3 = str.substr (3); //think in generalities, but we live in details.size_t pos = str.find("live"); // position of "live" in strstring str3 = str.substr (pos); // get from "live" to the end
set
set 用来为什么C++中的集合容器,但是是底层是用红黑树实现的,其迭代器不能加减常数。但是如何还想用set迭代器加减常数,可以使用vector模拟一个set。每次修改vector之后,需要使用del_dup函数除去重复元素。
void del_dup(vector<int> &vec) { sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end());}
C++与python语言切换时的一些定式思维
二维数组的访问
python中二维数组中可以使用[row, col]的方式访问二维数组
但是C++中逗号表达式表示顺序执行所有表达式,并且将最后一个表达式的值返回。C++ A[i, j]其实表示的是A[j],只是一个指针而已,这会带来很大的误解。
阅读全文
0 0
- 实践积累
- C类语言积累_实践出真知
- C积累
- C积累
- C++实践积累
- 《C语言及程序设计》实践项目——让代码积累“看得见”
- 程序积累(C)
- c/c++经典积累
- C 常用库函数积累
- C与C++积累
- C语言积累
- 点滴积累【C#】
- C语言知识点积累
- C/C++知识点积累
- C语言编码积累
- C语言积累
- objective-c 算法积累
- Objective-C-语法积累
- PDO 增删改查
- kafka无法正常生产消费,但依旧可以创建生产者和消费者
- Quartz Cron表达式 每周、每月执行一次
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处
- php中查询数据库含通配符时需要转义的问题
- C++实践积累
- LightOJ
- Linux下修改Mysql数据库存放路径
- Windows下Android app压力测试学习笔记
- 2017暑期集训Day 9 递推
- Unity3D 海水多线程渲染算法实现
- 文章不错记录一下
- Jquery加强
- namespace的理解