c++ primer学习记录(二)

本文深入探讨C++编程中的关键技巧,包括使用getline函数读取整行输入,利用size()函数获取string对象大小,通过箭头运算符访问对象成员,以及如何在现代C++中优选vector、迭代器和string而非传统数组、指针和C风格字符串。同时,文章还介绍了多维数组的实现方式,以及如何在字符串和数组操作中运用各种标准库函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 string

getline(cin,s); 读取一行

cin读入会自动忽略开头的空白(空格符 换行符 制表符)从第一个真正的字符读起,直到遇到下一处空白为止

getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读取内容,直到遇到换行符(换行符也被读入),之后将所存内容存入到string对象中(不存换行符)

size()函数返回值是size_type 无符号类型 能够存放任何string对象的大小。

int main()
{
    string s("makise kurisu");
    for(auto &c:s)  //使用引用
        c=toupper(c);   //给c赋值可改变原值
    cout<<s<<endl;
    return 0;
}

将s变为大写字符串

c++定义了箭头运算符,箭头运算符把解引用和成员访问两个操作结合在一起 it->mem 等同于 (*it).mem

数组

    int *ptrs[10]; //含有3个整数的数组
    int (*Parray)[10]=&arr; //Parray指向一个含有10整数的数组
    int (&arrRef)[10]=arr;  //arrRef引用一个含有10整数的数组

 

标准库函数 begin end 可获取数组的头指针和尾指针

int main()
{
    int a[3]={1,2,3};
    int *beg=begin(a),*ed=end(a);
    while(beg!=ed) cout<<*beg<<endl,beg++;
}
int main()
{
    int a[5]={1,2,3,4,5};
    int *p=&a[2];   //p指向索引为2的元素
    int j=p[1];     //j指向*(p+1) 即a[3]
    int k=p[-2];    //k指向*(p-2) 即a[0];
}

 

任何出现字符串字面值的地方都可以用以空字符结束的字符数组替代

*允许使用以空字符结束的字符数组来初始化string对象或者为string对象赋值

*在string对象的加法运算中允许使用以空字符结束的字符数组作为其中一个运算对象(不能两个运算对象都是),在string对象的复合赋值运算中允许使用以空字符结束的字符数组作为右侧的运算对象。

string专门提供了名为 c_str的成员函数 返回值是一个c风格的字符串 指针的类型是 const char* 从而保证我们不会改变字符数组的内容

int main()
{
    string s="hello world";
    const char *str=s.c_str();
}

 

不允许使用vector初始化数组,相反允许使用数组初始化vector。

int main()
{
    int a[5]={1,2,3,4,5};
    vector<int> v(begin(a),end(a)); //储存a数组一样的内容
    vector<int> v1(a+1,a+4); //储存a[1] a[2] a[3]
}

 

现代c++程序应当尽量使用vector和迭代器以及string,避免使用内置数组和指针和c风格字符串

 

多维数组

严格来讲,c++语言没有多维数组,只有数组的数组

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值