C++ Primer 二 字符串、向量和数组

        本章讲解:内置数组;string支持可变长度的字符串;vector可变长度的集合。还有与string或vector配套使用的迭代器。

1.命名空间的using声明

        比如使用标准库中cout语句,需要使用::操作符:编译器从操作符左侧名字所示的作用域中寻找右侧那个名字。

std::cout << "hello world";
std::cout << "hello china";

1.1 每个名字都需要独立的using声明

   如上代码格式,每条使用标准库的语句都需要使用std::,而使用了using语句后,在文件中只需要声明一次。

#inlcude <iostream>

using std::cout;
using std::cin;
using std::endl;

int main(){
    cout << "hello world" << endl;
    cout << "hello china" << endl;    

    return 0;
}

1.2头文件不应包含using声明

        头文件中的代码一般来说不应该使用using声明。因为在编译的时候,头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序而言,由于不经意包含了一些名字,反而可能因为头文件包含using,造成产生始料未及的名字冲突。    

2.标准库类型string

        标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。作为标准库的一部分,string定义在命名空间std中。使用string类型,代码中必须包含:

#include <string>
using std::string;

2.1定义和初始化string对象

        string定义了多种初始化对象的方式:        

string s1;             // 默认初始化,s1是一个空字符串。没有字符,只有一个末尾的空字符
string s2 = s1;        // s2是s1的副本
string s22(s1);        // s22是s1的副本
string s3 = "hiya";    // s3是该字符串字面值的副本
string s33("hiya");    // s33是该字符串字面值的副本
string s4(10, 'c');    // 把s4初始化为由连续10个字符c组成的字符串
  • 直接初始化和拷贝初始化

        如果使用等号=初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器是把等号右边的初始值拷贝到新建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化(direct initialization)。

string s5 = "hello";       // 拷贝初始化;
string s6("hiya");         // 直接初始化;
string s7(10, 'c');        // 直接初始化,s7的内容是cccccccccc

对于字符串的拷贝初始化和直接初始化可以结合使用:

string s8 = string(10, 'c');

上面代码执行的经过是:先直接初始化,用使用数字10和字符c两个参数创建出一个string对象,然后这个对象拷贝给s8,对s8完成拷贝初始化,相当于如下两条语句:

string temp(10, 'c');
string s8 = temp;

2.2.string对象上的操作

  • 读写string对象

        和int、double等内置类型一样,可以使用标准库中的iostream来读写。

int main(){
    string s;                // 空字符串
    cin >> s;                // 将string对象读入s,从第一个真正字符开始,遇到空白字符停止
    cout << s << endl;       // 输出s

    return 0;
}

        和其它内置基本数据类型一样,可以多个输入输出连写使用:

string s1, s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;
  • 读取未知数量的string对象

  • 使用getline读取一整行

  • string的empty和size操作

  • string::size_type类型

  • 比较string对象

  • 为string对象赋值

  • 两个string对象相加

  • 字面值和string对象相加

  • 2.3处理string对象中的字符

3.标准库类型vector

4.迭代器介绍

5.数组

6.多维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值