Tag Archives: C++

C++STL中list与vector在效率方面的比较

1、vector的数据结构类似数组,在内存中为一片连续的存储空间;
2、list的数据结构为链表,每个元素中都保存了下一个元素的地址,空间可以不连续;
3、基于两者数据结构的特点,vector的随机访问速度快,list的增删操作快;
4、以1亿个元素的分别以list与vector的方式存储来比[……]

继续阅读

STL中三大组件(容器+迭代器+算法)的最简单组合使用

1、STL全称为Standard Template Library,标准模板库,C++开发中最为常用的标准库;
2、STL有点类似于ObjC中的Foundation库,语言之间的类比有助理解,融汇贯通;
3、STL中最重要的三大组件为容器、迭代器、算法;
4、迭代器为容器与算法之间的桥梁;[……]

继续阅读

C++中string迭代器与reserve函数的冲突

1、迭代器做为容器与算法之间的桥梁方便了各种场景与功能的实现;
2、string类的迭代器相当于char*的指针;
3、string在被初始化或赋值后系统会分配一定大小的容量(mac下默认为22,超出后15+16*n);
4、string可通过capacity查看当前容量大小;
5、stri[……]

继续阅读

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;
}

[……]

继续阅读