c++基础---->Linux环境

1 开发环境

  • 有两种方式:
    • 使用集成开发工具
    • 使用编译器:建议使用免费的GNU
      • GNU在linux中通过sudoapt install c++进行安装,安装前通过 c++-v测试没有异常,说明已经安装。
      • GNU使用编译使用命令与C语言相似,只需要把gcc改为g++.

2 输入输出

  • 输入和输出并不是C++语言中的正式组成成分,C和C++本身都没有为输入和输出提供专门的语句结构。
  • 输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。
  • C++的输出和输入是用“流”(stream)的方式实现的。在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。
  • 在执行输入输出语句时,先把数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到输入输出语句中的endl(或′\n′,ends,flush)为止。

3 格式控制

3.1 预定义操作

要导入头文件<iomanip>,并且都属于名字空间std。

(a) std::setw(n) 设置输出宽度, 只对后面一次输出生效。 除了这个,其他的都是永久性的。

(b) std::setfile(char) 设置填充字符

(c) 设置输出进制
std::hex或std::setbase(16) 设置16进制输出
std::oct或std::setbase(8) 设置8进制输出
std::dec或std::setbase(0) 设置10进制输出
(d)getline(cin, string) 获取一行的输入,空格会被接受。

在调用之前加 cin>>ws; 将去掉开始的空格,如

string str;

cin>>ws;

getline(cin,str);


(e) std::flush 刷新输出
(f) std::setprecision(n) 设置精度 即输出数字个数 只对浮点数生效(float, double)

    double a = 23.32;
    cout<<setprecision(3)<<a<<endl;//23.3

3.2 状态标志流操作

  • cout.setf(flags),可以设置多个标志,标志之间使用 '|' 隔开。
  • cout.unsetf(flags),取消设置

flags的值可以是:

  • ios::left, ios::right, 设置左右对齐
  • ios::showpos设置显示正负号
  • ios::scientific 设置科学计数法输出 只针对浮点数才生效。
  • ios::fixed 设置6位小数输出

3.3常见字符串操作

  • c_str()把string转换成c风格的字符串,只能使用const char *类型来接收。
  • int size(); //返回当前字符串的大小。遇\0结束的长度
  • int length(); //返回当前字符串的长度。遇\0结束的长度
  • bool empty(); //当前字符串是否为空。 字符串长度为0时,返回1, 长度大于0时, 返回0。
  • char at(int index); 根据索引获取字符, 等价于string[int index]
  • string append(string);连接字符串
  • int find(string), 参数表示子符串在调用字符串中的首字母索引,找不到返回-1.
  • 删除

erase()

            1. erase(pos, n):删除从pos位置开始的n个字符, 当余下的字符不足n个时,有多少删除多少。
            2. erase(pos):删除从pos位置开始的所有字符。
  • 插入

insert( )

string insert(size_t pos, const string& str);从第pos的位置插入字符串str。

string insert(size_t pos, constchar* s, size_t n);

constchar* s 如果传的是c风格的字符串,将在字符串的第pos的位置插入s,只插入前n个。

constchar* s如果传的是c++风格的字符串,将在字符串第pos的位置插入,从s的第n个位置之后的字符全部插入到字符串中。

    string str = "123456";
    string s = "ABCDEFG";
    str.insert(1,s,3);
    cout<<str<<endl;//1DEFG23456
    string str = "123456";
    char *s1 = "ABCDEFG";
    str.insert(1,s1,3);
    cout<<str<<endl;//1ABC23456

3.3.1 字符串比较

使用:==、!=、<、>、<=、>= 或使用string.compare(string)

  • int compare(string)比较大小

大于返回正整数,小于返回负整数,等于返回0.

3.3.2 字符串反转

需要加入头文件 <algorithm>

std::reverse(str.begin(), str.end());把字符串进行反转

4 变量引用 reference

对一个数据可以使用“引用”,这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名。

	int a = 100;
    int &b = a;//为a表示的内存空间增加一个名字b

5 内联函数

  • 函数被inline修饰,这样的函数是内联函数,又称内嵌函数或内联函数。在编译时将所调用函数功能的代码直接嵌入到主调函数中。这样可以避免频繁调用的小函数大量消耗栈空间(栈内存)的问题。
  • inline 函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。
  • inline 的使用是有所限制的,不能包含复杂的结构控制语句例如 while、switch等。

总结

  1. 表面上调用函数,实质是把调用函数功能的代码替换到该位置。
  2. 内联函数和需要使用的地方需要在同一个文件才可能是内联函数。

6 函数重载

函数重载是多态的一种体现

C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。即对一个函数名重新赋予它新的含义,使一个函数名可以多用。

  • C++允许赋予函数参数默认值,即在调用该函数时,可以不写某些参数的值,编译器会自动把默认值传递给调用语句中。
  • 默认值可以在声明或定义中设置;也可在声明或定义时都设置,都设置时要求默认值是相同的。 (在声明中定义更可靠)

注意事项:

  1. 如果不是在声明中设置默认值,而在定义中设置,那么定义一定要放在函数调用之前, 不能将实际值传递给引用类型的参数。(不推荐使用)
  2. 可以将变量作引用类型参数的默认值,这时变量必须是已经声明且是全局变量 。
  3. 若给某一参数设置了默认值,在该参数后面的参数都需要设置默认值。
  4. 在调用时,若给已经设置默认值的参数传递实际值,既要取代默认值,在该参数的左边的参数都需要传递实际值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值