C++中容易忘记的知识点——vector和string(三)
来源:互联网 发布:2017好玩的手游 知乎 编辑:程序博客网 时间:2024/06/05 22:41
这些总结是根据自己的遇到的一些问题或者自己容易忘的一些知识点的总结,可能会有不全面,请大家谅解。
vector
vector是连续内存的容器,它的优点是随机存储很快,但是在中部删除或插入元素很慢。
vector迭代器失效
迭代器失效的情况一般出现在插入或删除操作的时候。
insert失效的时候
insert失效的原因主要是因为vector的capacity发生变化,vector所在的内存不够使用,就会重新开辟一段足够大的内存来存储容器里的元素,当前内存会被重新释放,这样就导致迭代器失效。
int main(){ vector<int> a; a.push_back(1); cout<<a.capacity()<<endl; //输出为1 std::vector<int>::iterator iter = a.begin(); a.push_back(2); cout<< a.capacity()<<endl; //输出为2 cout << *iter << endl; //出现错误,因为容量发生变量,导致之前的迭代器已经失效 return 0;}
erase失效的时候
主要是由于erase(iter)之后,iter这个迭代器已经失效,无法再执行++,–的操作。
int main(){ vector<int> a; for (int i = 0;i < 10;i++) //a的初始化 a.push_back(i); for (auto it = a.begin();it != a.end();++it) { cout << *it << " "; cout << &(*it) << endl; } for (auto it = a.begin();it != a.end();it++) { if (*it == 3) { it=a.erase(it); } cout << *it << " "; cout << &(*it) << endl; } return 0;}
从输出结果可以看出,删除3之后,原来3地址为数字4,说明erase(it)之后将迭代器it后面的元素逐个向前移动一个int单位,保证vector在内存上是连续的特性。
string
string 的初始化
string s; //默认构造函数,生成空的字符串s string s1("hello world!"); //将c字符串作为s1的初始string s2(s1); //拷贝构造函数string s3=s2;string s4(10,'c'); //创建每个元素为‘c’的string的对象,长度为10//string s(s4,pos,len) string s5(s4,3,4); //s5是s4从下标3开始4个字符的拷贝,超过s3.size出现未定义,也可以是string s(s4,pos),表示从下标pos到结尾的拷贝//string s(cp,n)char cs[]="12345"; //或者写成char *cs="12345"; string s6(cs,3); //复制字符串cs的前3个字符到s当中string s7(cs,3,2); //赋值字符串cs从下标3开始2个字符。string s8={'a','b','c'}; //利用列表进行初始化string s9{'a','b','c'};string s10(s8.begin(),s8.end());
string 成员函数以及数值转换
string需要注意的知识点
- strlen()等都是C语言的库,如果string要用,必须使用c_str()转换为字符指针
- string可以通过+串联,但是必须保证+至少一边是string对象。
- 字符串指针转换为string类型,可以直接采用直接赋值。
string s;char *p="hello world!";s=p;
-string 转char[],可以采用依次赋值,最后需要将char的尾部赋值为‘\0’。
阅读全文
0 0
- C++中容易忘记的知识点——vector和string(三)
- C容易忘记知识点
- C++容易忘记的知识点——map和set(六)
- OC中一些容易混淆和忘记的知识点总结
- PHP容易忘记的知识点
- javascript 容易忘记的知识点
- PHP中最容易忘记的一些知识点总结
- C++中容易忘的知识点——list和forward_list(四)
- 容易忘记的android 知识点(实时更新)
- C中容易忽略的知识点
- java比较容易忘记的知识点
- CSS3容易忘记的知识点记录(01)
- C++STL中string和vector的用法
- 第一天学习javascript中遇到的容易忘记的知识点
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- C语言中最容易出错的知识点
- C++中容易考的知识点总结——类(二)
- 我的JAVA学习笔记(记下一些容易忘记的知识点)持续更新
- 分布式系统之Quorum (NRW)算法
- 二维码之实现代码
- JSP读书笔记
- SonarQube插件开发自定义规则(5)添加可配置参数
- codeforce-767A
- C++中容易忘记的知识点——vector和string(三)
- 博客两个有意思的特效
- halcon学习笔记——(6)单摄像机标定
- Material 组件 md-icon
- 数据结构:用JS实现链表
- SonarQube插件开发自定义规则(6)注意事项
- 【LibUIDK界面库系列文章】Web Browser控件避免闪烁
- halcon学习笔记——(7)HALCON标定后的二维测量
- 常用的Sql 函数