马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
c++根本入门
- #include <iostream>
- #include <cmath>
- #include <unistd.h> // 总结:按照书写依次往下,先看 iostream 再看 cxxx 最后 xxx.h
- using namespace std; // 本质:自定义作用域,作用域就在该命名空间内部。一个命名空间内部名字不重名就可以,不同命名空间可以相同
- int main()
- {
- // 输出
- cout << "abc" << 100 << endl; // cerr << "abc"; 不带缓冲区输出,无需换行缓冲
-
- // 输入
- int n;
- cin >> n >> m; // endl 换行符
-
- return 0;
- }
- // std 看作班级,std::cout 就是告知某班某成员,避免反复书写,直接写在程序开头
复制代码 c++编译
g++ old_name -o new_name
字符串
- string 会自动分配扩大内存空间
-
- // 空间扩展演示
- string s14;
- cin >> s14; // 输入123456789
- cout << s14.capacity() << endl; // 空间大小 15 默认空间大小就是15,若后续超出范围会自动扩展
- cout << s14.length() << endl; // 实际大小 9
- // 输入
- sreint s;
- cin >> s;
- cout << s << endl;
-
- // 赋值
- string s1 = "abcd";
- // 复制
- string s2;
- s2 = s1;
- // 拼接
- string s3;
- s3 = "xyz" + s1;
- s3 += "123";
- // 比对
- if(s1 == "abcd")
- cout << s1 << "== abcd" << endl;
- if(s1 > "aBcd")
- cout << "yes" << endl; // 挨个按照 ascoll 码值来对比
- // 展示循环打印字符串
- string s[10] = "abcdef";
- for(int i = 0; i < s.length; i++)
- {
- cout << s[i];
- }
- cout << endl;
- // 删除
- string s("");
- cout << s << endl;
- s.erase(4,5); // 从第四个位置开始删除,删除5个索引
- cout << s << endl;
-
- // 查找
- cout << s.find("all", 30, 100) << endl; // 从下标索引30开始向后查找,一直查到100
- cout << s.find_last_of("So") << endl; // 从后往前查询
- // 替换
- string s("123456789");
- cout << s.replace(5, 5, "A") << endl; // 将下表为5的位置开始,替换后面5个为A
复制代码 引用
概念:给一个已有的对象(变量)取别名- & 号放在定义语句当中就是取别名
- // 变量
- int a = 100;
- int &b = a; // 让 a 的别名叫做 b
- // 数组
- int c[10] = {1,2,3};
- int (&d)[10] = c;
- // 指针
- int *p = &a; // 此时是取地址,不同于取别名
- int *(&q) = p;
- 注意:
- 1、不可以给常量取引用,int &r = 100; 常量是匿名的
- 2、引用必须同时定义与赋值
- 3、相较于指针更加快速高效
- // 例如:交换两个数的值
- void swap(&a, &b)
- {
- int temp;
-
- temp = a;
- a = b;
- b = temp;
- }
- int main()
- {
- int a = 1, b = 2;
-
- swap(a, b);
-
- cout << a << b << endl;
-
- return 0;
- }
复制代码 函数默认参数
- void f(int a, float b = 3.14);
- void f(int a, float b)
- {
- cout << a << endl;
- cout << b << endl;
- }
- int main()
- {
- f(100, 1.23); // 显式的给 b 传递参数 1.23
-
- f(200); // b 使用默认值,3.14
- }
- 注意:
- 1、为防止二义性,默认值参数只能位于最右边
- 2、声明指定默认值,定义不写默认值
复制代码 函数重载
本质就是同一个函数名有差别的版本。
函数重载时,调用函数是在编译期间就确定了具体的调用对象,因此将函数重载叫做静态联编
可以形成重载的环境(只要满足一个即可):
1、参数个数差别
2、参数范例差别
3、参数次序差别
3、类方法的const属性
4、平凡指针与常目标指针- // 参数个数不同
- void f(int a);
- void f(int a, int b);
- // 参数类型不同
- void f(int a);
- void f(float b);
- // 参数顺序不同
- void f(int a, float b);
- void f(float a, int b);
- // 类方法的 const 属性
- class Node
- {
- void f(int a);
- void f(int a)const;
- };
- // 普通指针与常目标指针 查看匹配度
- void f(char *p);
- void f(const char *p);
复制代码 不可以形成重载的环境:
1、函数名、函数参数列表完全划一
2、函数返回值范例差异
3、静态函数声明(static)
4、const型变量(包罗常指针)- // 函数名、函数参数列表完全一致
- void f(int a);
- void f(int a);
- // 函数返回值类型差异
- void f(int a);
- int f(int a);
- // 静态函数声明(static)
- void f(int a);
- static void f(int a);
- // const 型变量(包括常指针)
- void f(int *a);
- void f(int * const a);
复制代码 堆内存管理
new:分配堆内存
delete:开释堆内存- int main()
- {
- // 分配单个
- int *p = new int; // 要在堆内存开辟一块新的可以放下 int 类型的空间
- *p1 = 666;
- delete p1;
-
- // 分配多个
- char *k = new char[1000];
- for(int i = 0; i < 1000; i++)
- {
- k[i] = 666;
- }
- delete [] k;
-
- return 0;
- }
- 注意:
- 相比于 malloc 的区别:(delete 与 free类似于此)
- 1、new 会自动调用类的构造函数,而 malloc 不会;
复制代码 罗列循环
- int main()
- {
- int a[] = {1,2,3,4,5};
-
- for(int i : a) // 用 i 来依次取得数组内部数据
- {
- cout << i << endl;
- }
-
- return 0;
- }
- int main()
- {
- list<string> names;
- names.push_back("1");
- names.push_back("2");
- names.push_back("3");
-
- for(string n : names)
- cout << n << endl; // 将名字全部打印出来,前面的类型对应后面需要打印的元素的类型
-
- return 0;
- }
- // 若是版本不支持则: g++ old_name -o new_name -std=c++11
复制代码 |