1.using用法:using namespace ::name;注意事项:一般不在头文件使用using否则很容易导致运用命名空间不对错误。

2.string的方法:
①getline(输入流,string对象);注意一点是,函数从给定流读入内容,直到遇到换行符结束,(换行符也被读进来了),然后把所读的内容存入那个string对象中去(注意不存换行符

②size,size函数的返回值是string::size_type,可以确定的是这是一种无符号数,可以使用auto或者decltype来推断变量的类型。
auto len = line.size(); //len类型是string::size_type.
ps:如果一条表达式中已经有了size()函数就不要int了,避免混用有符号int和unsigned带来的问题(负数和无符号数比较时候会自动转换为一个很大的无符号数)

3.string是一种可变字符序列,其实就是一种可变长的字符数组,注意它和字符/字符串字面值不是同一类型的量。

4.当把string对象和字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string.

5.如果想改变string对象中字符的值,必须把for(declaration : expession)中的循环变量定义成引用类型。

6.用下标访问string类型变量前,都需要检查s是否为空。否则访问会导致不可预料的结果。
例子:
string s ("some string");
if(!s.empty())
{
s[0] = toupper(s[0]);
}
5
 
1
string s ("some string");
2
if(!s.empty())
3
{
4
    s[0] = toupper(s[0]);
5
}


7.注意点:string下标使用的注意点:大于等于0,小于等于s.size().
①总是设下标的类型为string::size_type
②满足下标小于s.size();

8.对于vector的编程要求:
①必须确保所写的循环正确无误,特别是在循环条件有可能改变vector对象容量的时候。
②如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环。
③任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

9.要使用vector中的size_type必须先指定它是由哪种类型定义的。vector对象的类型总是包含着元素的类型:
vector<int>::size_type  //正确
vector::size_type  //错误

10.只有当元素可以比较的时候,vector对象才可以比较。

11.vector对象(以及string对象)的下标运算可用于访问已经存在的元素,而不能用于添加元素(添加元素只能通过push_back,在不用这些方法前这个vector对象的数量都是已经定下的,因此向其中添加元素会引起访问越界。)

12.在for循环中应该要更多的使用!=判断符,而不是类似<这类的大小比较符,因为并不是所有的容器都定义了<,>,但是所有的容器都定义了== 和!=,因此这种编程风格在标准库提供的所有容器上都有效。

13.每个容器类定义了名为iterator和const_interator的类型。前者可用于常量或非常量对象,后者指的是所定义的迭代器所指的元素值不能修改,因此只能用于常量对象

14.begin和end返回的是iterator还是const_iterator由容器的类型决定,对象是常量对象,则返回const_iterator,非常量则为iterator.另外C++11中新引入了两个新函数,cbegin和cend,无论对象是常量还是非常量,这两个函数返回值都是const_iterator.

15.vector和数组的区别:数组的大小确定不变,不能随意向数组中增加元素。

16.想要理解数组的声明的含义,最好的方法就是从数组的名字开始按照由内向外的顺序阅读.
例子:
int (*Parray)[10] = &arr; //Parray指向一个含有是个int元素的数组
int (&arrRef)[10] = arr; //arrRef引用一个含有十个整数的数组
int *(&arry)[10] = ptrs; // arry是数组的引用,该数组含有10个int型指针
 
1
int (*Parray)[10] = &arr; //Parray指向一个含有是个int元素的数组
2
int (&arrRef)[10] = arr; //arrRef引用一个含有十个整数的数组
3
int *(&arry)[10]  = ptrs; // arry是数组的引用,该数组含有10个int型指针

17.当decltype作用于数组的时候就应该小心,
int iarr[10] = {0};
decltype(iarr)ib;

这个时候ib的定义等价于 int ib[10];两者是一样的。不要觉得ib是一个指针了,它是一个正宗的数组。


18.标准库(如vector,string)限定使用的下标必须是无符号类型,而内置的下标运算所用的索引值不是无符号类型。

Chapter3 (字符串,向量,数组) --C++Prime笔记的更多相关文章

  1. shell入门笔记2:字符串、数组、echo与printf

    说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...

  2. PHP字符串和数组

    php常用函数和数组 字符串替换 , 分割字符串(字符串转数组),  拼接数组的值(数组组转字符串) , 格式化输出  查找字符首次出现的位置 , 获取字符串长度 以一个数组作为key另一个数组作为v ...

  3. JavaScript权威设计--JavaScript数组(简要学习笔记九)

    1.数组的创建 如: var a=[1.1,null,"a"]; var b=[1, ,3]; //中间的那个元素是undefined var c=[ , , ] 这里c.leng ...

  4. sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

    写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...

  5. Java中将一个字符串传入数组的几种方法

    String Str="abnckdjgdag"; char a[]=new char[Str.length()]; -------------------方法1 用于取出字符串的 ...

  6. 03- Shell脚本学习--字符串和数组

    字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似: 单双引号的区别: 双 ...

  7. js中字符串和数组相互转化的方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...

  8. bash中不可以用字符串做数组下标

    bash中可以用字符串做数组下标吗例如 test["abc"]=1------解决方案-------------------- 好像是误会,是awk里可以,bash shell里不 ...

  9. js数字、字符串、数组之间的转化

    1.数组转字符串 var a, b; a = ,,,,); b = a.join("-"); 2.字符串转数组 var s = "abc,abcd,aaa"; ...

随机推荐

  1. 多种方法实现左右固定,中间自适应的CSS布局

    布局是面试中常问的问题,尤其是这类的题目,怎么答才好呢? 大多数人的第一个方法是浮动,没错,浮动.第二个方法呢?你回答定位,没错.第三个方法呢?.... 第四个方法呢?第五个方法呢?.... 其实能想 ...

  2. java第二次试验报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:郭皓  学号:20135327 成绩:             指导 ...

  3. GridView的控件说明[字典]-----方便查询

    GridView 控件以表格的形式显示数据,并提供对数据进行排序,选择,编辑,删除等功能. GridView能够完成的功能具体可以总结如下: 1,通过数据源控件将数据绑定到GridView控件 2,对 ...

  4. class 3 求数组中的最大值(单元测试)

    1.问题引出: int Largest(int list[], int length) { int i,max; ; i < (length – ); i ++ ) { if(list[i] & ...

  5. SDPA: Toward a Stateful Data Plane in Software-Defined Networking

    文章名称:SDPA: Toward a Stateful Data Plane in Software-Defined Networking 发表时间:2017 期刊来源:IEEE/ACM Trans ...

  6. synchronized、锁、多线程同步的原理是咋样

    先综述个结论: 一般说的synchronized用来做多线程同步功能,其实synchronized只是提供多线程互斥,而对象的wait()和notify()方法才提供线程的同步功能. 一般说synch ...

  7. MongoDB安装笔记

    2017年11月17日,在Windows Service 2008R2上成功安装MongoDB. 版本:mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.m ...

  8. 6/5 sprint2 看板和燃尽图的更新

  9. Delphi中比较两个对象是否一致及地址是否相同[转]

    在delphi中,C#也是如此,对象的地址与对象变量(引用)的地址不是同一个概念.要加以区别. procedure TForm1.btn1Click(Sender: TObject); var    ...

  10. ANR基础

    转自:http://blog.sina.com.cn/s/blog_c0de2be70102wd1k.html 1.ANR basic knowledge ANR分类: Key Dispatch Ti ...