1、迭代器做为容器与算法之间的桥梁方便了各种场景与功能的实现;
2、string类的迭代器相当于char*的指针;
3、string在被初始化或赋值后系统会分配一定大小的容量(mac下默认为22,超出后15+16*n);
4、string可通过capacity查看当前容量大小;
5、stri[……]
Category Archives: C/C++
C++类中重载输出运算符<<
1、在C++中方法重载是一个重要的特性,运算符同样也是可以重载的;
2、自定义类,正常情况下是不能直接使用输出运算符的,如(cout << xxx;);
3、我们需要使用cout打印输出类的信息,该怎么cout呢?(类似objC中重写对象的description方法);
4、cou[……]
C++类的基本定义与使用
1、类的基本定义
1.1、class关键字+类名,类名使用大驼峰命名规则;
1.2、使用private、protected、public修饰成员属性与方法;
1.3、方法名使用大驼峰命名规则,成员属性使用m_xxxx下划线命名规则;
1.4、构造函数与析构函数名字与类名相同,无返回值类型,可重载,析构函数前加~;
1 2 3 4 5 6 7 8 9 10 11 12 | class ClassName{ private: // 私有属性与方法 string m_prop1; protected: // 保护属性与方法 int m_prop2; public: // 公开属性与方法 double m_prop3; // 构造函数与析构函数 ClassName(); ~ClassName(); void Method(); }; |
2、类方法的实现
2.1、在Cpp文件中,引用.h或.hpp文件,通过ClassName::Method()的方式实现类方法;
2.2、同一个Cpp文件中可实现多个类的方法,通过作用域限定符(::)区分;
1 2 3 4 5 6 | ClassName::ClassName() { // 这是默认的构造函数,可省略 // 一般用来对象初始化工作; // 可重载 } |
3、基本示例[……]
C++学习笔记
1、C++编译过程
1.1、预处理,编译器将C++代码中的宏、引用等预处理指定进行展开,生成.i或.ii文件;
1.2、编译,编译器将展开后的文件进行编译生成汇编文件.s;
1.3、汇编,汇编器将汇编文件汇编生成链接文件.o或.obj;
1.4、链接,链接器将链接文件与库文件或第三方文件链接生成二进制文件,即可执行文件;
1.5、第一个C++程序
1 2 3 4 5 6 7 8 | #include using namespace std; int main(){ cout << "Hello Cpp!!" << endl; return 0; } |
2、变量名三条定律
2.1、变量名只能是下划线、字母、数字;
2.2、首字母只能是下划线、字母;
2.3、不能是保留字/关键字;
3、C++常用数据类型
3.1、int –> 32位 -2147483648~+2147483647;
3.2、short int –> 16位 -32768~+32767;
3.3、long int –> 32位 -2147483648~+2147483647;
3.4、long long int –> 64位 -9223372036854775808 ~ +9223372036854775807;
3.5、float 32位 –> -3.4E-38~+3.4E+38;
3.6、double 64位 –> -1.7E-308~+1.7E+308;
3.7、char 8位 –> -128~+127;
3.8、关于精度的一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include #include using namespace std; int main(){ int i = 1234567890; float f = 1234567890123456789; double d = 1234567890123456789; long double ld = 1234567890123456789; cout << setprecision(20); cout << i << "n" << f << "n" << d << "n" << ld << endl; return 0; } |
1234567890
1234567939550609408
1234567890123456768
1234567890123456789
Program ended with exit code: 0
4、经典冒泡排序C++实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include using namespace std; int main() { // 数组、数组长度、循环次数 int array[] = {128, 1, 11, 3, 33, 71, 2, 31, 4, 25, 61}; int len = sizeof(array) / sizeof(array[0]); int loop_count = len - 1; // 冒泡次数循环 for (int i = 0; i < loop_count; i++){ // 单次冒泡比较循环 for (int j = 0; j < loop_count - i; j++){ if (array[j] > array[j+1]){ array[j] = array[j] + array[j+1]; array[j+1] = array[j] - array[j+1]; array[j] = array[j] - array[j+1]; } } } for (int i = 0; i < len; i++){ cout << array[i] << endl; } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include using namespace std; int main() { // 数组、数组长度、循环次数(最后一个数不需要比较) int array[] = {2, 1, 4, 3, 6, 5, 8, 7, 10, 9}; int len = sizeof(array) / sizeof(array[0]); int loop_count = len - 1; for (int i = 0; i < loop_count; i++){ // 调换前假设当前第一个为最小数 int min_index = i; // 从第1个开始循环,可减少一次循环 for (int j = i + 1; j < len; j++){ if (array[j] < array[min_index]){ min_index = j; } } // 如果第一个为最小数,不交换 if (i != min_index){ array[i] = array[i] + array[min_index]; array[min_index] = array[i] - array[min_index]; array[i] = array[i] - array[min_index]; } } // 重新打印数组中的值(排序后) for (int i = 0; i < len; i++){ cout << array[i] << " "; } return 0; } |
[……]