《C++ Primer》第三章 字符串、向量、数组

目录

前言

3.1 命名空间的using声明

3.2 标准库类型string

string的一些操作

​编辑

string对象的创建

string对象上的操作

处理单个string对象中的字符 

3.3标准库类型vector

3.4迭代器介绍

创建

3.5数组

总结


一句话

本章一句话,数组和指针的升级版就是容器和迭代器。

3.1 命名空间的using声明

话不多说,见两张图差异。

#include<iostream>

int main(){

    std::cout<<"hello wolrd"<<std::endl;
    return 0;
}

使用后

#include<iostream>
using namespace std;
int main(){

    cout<<"hello wolrd"<<endl;
    return 0;
}

方便偷懒,又没什么影响,何乐而不为。

3.2 标准库类型string

要用string对象,需要头文件#include<string>。

#include<string>

string的一些操作

string对象的创建

在创建方面,string是一个对象,那么和int创建的方式差不了太多。

    string s1;          //定义string对象,默认初始化为空字符串
    string s2="Alice";  //拷贝初始化为Alice
    string s3=s2;       //拷贝初始化为Alice
    string s4("BOb");   //直接初始化为BOb
    string s5(3,'a');   //s5的内容是3个a,即aaa

string对象上的操作

输入string和输出string

在输入string时,string对象会忽略前面的空白,并从第一个字符读取直到下一个空白。

    string s1,s2;   //创建两个string对象,都默认初始化为空字符
    cin>>s1>>s2;    //键盘键入“  hello world!”
    cout<<s1<<endl; //输出 hello
    cout<<s2<<endl; //输出 world!

对string对象输入任意数量的字符串

不会保留空格,且每个单词换行。

    string s;
    while(cin>>s){  //反复读取,直到到达文件结尾
        cout<<s<<endl;  //逐个输出每个单词,每个单词后面并换行
    }

使用getline读取一整行

读取一行,且会保留空格。

    string line;
    getline(cin,line); //获取一行
    cout<<line<<endl;

empty和size操作

empty判断字符串是否为空,size输出字符串的长度。

    string line;
    while(getline(cin,line)){
        if (!line.empty() && line.size()>=50) //如果非空且大于50个字符的行才输出
            cout<<line<<endl;
    }

string的比较

用“==”可以判断两个字符是否一致。

两个string对象相加

就是把两个字符拼接。

字面值和string对象相加

“字面值+string对象”等价于拼接,但不能“字面值+字面值”。

处理单个string对象中的字符 

用for遍历字符串的每个字符

    string line("sadjfljkfdljas");
    for(auto c:line)
        cout<<c<<endl;

for+上述表=很强大!

用for改变这个字符串内容

用for改变这个字符串内容,必须把循环体变量定义成引用类型。

例如:转换成大写模式

    string str("sadjfljkfdljas");
    for(auto &c:str)
        c=toupper(c);
    cout<<str<<endl;

用"[]"访问字符串的其中一个字符

    string str("sadjfljkfdljas");
    cout<<str[0]<<endl;

靠,这样按书上介绍顺序写太累了,后面按照我自己理解来写了。

3.3标准库类型vector

vector表示对象的集合,里面都是相同的元素,用vector<int>来指定类型,因为里面装着许多元素,所以也加容器(container)。vector可以理解成升级版的数组,不定长的数组,可以随时增加。

对比数组,很容易理解要学习定义、初始化、for遍历、索引[]、增加push_back().

 常用的如下

    #include<vector>
    vector<int> v;  //默认初始化为空
    vector<string> v2{"Aa","Bb"};   //指定初值的初始化
    v2.push_back("VV");    //往容器尾巴再添一个元素
    for(auto c:v2)  //遍历每个元素
        cout<<c<<" ";
    cout<<endl;
    cout<<v2[1]<<endl;  //索引指定输出

3.4迭代器介绍

为了方便访问容器里的元素,迭代器应运而生。

迭代器很像一个指针,但功能更多。

创建

    vector<int> v{1,2,3,4,5,6,7};
    auto it=v.begin(),e=v.end();  //it和e就是迭代器

 注意:修改容器后,迭代器会失效。

3.5数组

按照历史发展来说,数组升级后就是vector,最大区别就是数组大小固定,而vector灵活。

old:数组+指针

new:容器+迭代器

总结

C++是C语言的升级版,数组→容器、指针→迭代器,数组指针能实现的内容,容器和迭代器基本都能实现,而且功能更多,更高级(对同一功能用的代码更少),避免一直敲枯燥无味的重复性代码,更方便偷懒,现在作为C++程序员就应当尽量用容器和迭代器了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值