字符串 向量 数组

来源:互联网 发布:旅行团乐队 知乎 编辑:程序博客网 时间:2024/06/03 19:47

一.  标准库类型string

1.   它表示可变长的字符序列,必须包含string头文件,命名在std中。

#include<string>

using std::string;

2.   getline(is, s) :从is中读取一行赋给s,返回is。遇到换行符就结束读取操作。第三个参数可以设置终止符

3.   size()函数返回的是一个string::size_type类型的值。string::size_type是一个无符号值而且能足够存下任何string对象的大小。

4.   字符字面值字符串字面值的区别。字符串字面值不是string对象。

5.   必须确保加法运算符(+)的两侧运算对象至少一个是string。

6.   string对象是字符序列,用范围for语句操作:

for( auto  c  :  str)

      cout<< c <<endl;

下标运算符[]操作string对象

 s[2] = toupper(s[2]);

 

二.  标准库类型vector

1.   它表示对象的集合。也称容器。是类模板而非类型。集合中每个对象都有一个与之对应的索引,索引用于访问对象。

2.   要使用vector,必须:

#include<vector>

Using std::vector;

3.   由于引用不是对象,则不存在引用的vector。

4.   向vector对象中添加元素:push_back()

5.   如果循环体内包含有向vector对象添加元素的语句,则不能使用范围for循环。范围for语句体内不应改变其所遍历序列的大小。

6.   使用范围for语句操作vector对象:

vector<int > v{1,2,3,4,5};

for(auto  & a : v)

      a*= a;//求元素值得平方。

7.   size()函数返回的是vector<int>::size_type.

8.    下标访问vector对象:

vector<unsigned>scores (11 ,0);

usignedgrade;

while(cin>> grade){

      if(grade <=100)

            ++scores[grade/10];}

Vector对象以及string对象的下标运算符可用于访问已存在的元素而不能用于添加元素。

三.  迭代器

1.   迭代器可以访问某个元素,也能从一个元素移到另一个元素。

2.   begin成员返回指向第一个元素的迭代器;

end成员返回指向容器或string的尾元素的下一个位置(一个本部存在的尾后元素)的迭代器。

若容器为空,则begin和end返回的是同一个迭代器。

 for(auto it = s.begin(); it != s.end(); ++it)

      *it= toupper(*it);

3.iter->men与(*iter).men等价。

4.迭代器类型:vector<int>::iterator it;

                            string::iteratorit2;

                            vector<int>::const_iteratorit3;

                            string::const_iteratorit4;

如果vector或string对象是个常量,则只能用const_iterator;如果不是常量,则可以用iterator或者const_iterator都可。

5.c++11新特性:cbegincend,不论对象是不是常量都返回const_iterator。

6.两迭代器相减所得两迭代器距离,类型是difference_type的带符号整数型。

 

四.  数组

1.   定义数组时必须指定数组类型,不允许使用auto关键字去推断类型。不存在引用的数组

2.   字符串字面值的结尾处有一个空字符’\0’.

3.   不允许将数组的内容拷贝给其他数组作为其初始值。

int a[]={1.2.3};

 int a2[] = a;//错误

4.   指针的数组: int *ptr[10];//含有10个整数指针的数组

数组的指针:int (*ptr)[10] = &arr;//指向含有10个整数的数组。

5.   下标访问数组元素,下标类型为size_t与机器相关的无符号类型。在cstddef头文件中定义了size_t.

6.   范围for()遍历数组元素。

7.   使用数组的使用编译器会把它转化为指针

使用取地址符得到该元素的指针。

String  *p2 = num等价于p2 = &num[0];

8.   当使用decltype关键字时不会转化为指针,decltype(ia)返回的是数组。

9.   标准库函数beginend:这两个函数与容器中的两个同名成员函数类似,不过数组不是类型,所以这两个函数不是成员函数。这两个函数定义在iterator头文件中,int  *beg = begin(arr)。

10. 两个指针相减的结果是ptrdiff_t的标准库类型。ptrdiff_t是定义在cstddef头文件中的机器相关的类型。

11. C标准库string函数:strlen(p),strcmp(s1,s2),strcat(s1,s2),strcpy(s1,s2),定义在cstring头文件中,传入此函数的指针必须以空字符结束的数组。

 

0 0
原创粉丝点击