c++语法及算法简述

C++ 核心语法

C++ 是一种多范式编程语言,支持面向对象、泛型和过程式编程。基础语法包括变量声明、数据类型、运算符和控制结构。

变量声明使用 intfloatdoublechar 等关键字,例如:

int x = 10;
double pi = 3.14159;

控制结构包括条件语句和循环:

if (x > 5) {
    cout << "x is greater than 5";
} else {
    cout << "x is less than or equal to 5";
}

for (int i = 0; i < 10; i++) {
    cout << i << endl;
}

面向对象编程

C++ 支持类、对象、继承和多态。类定义对象的属性和方法:

class Rectangle {
private:
    int width, height;
public:
    Rectangle(int w, int h) : width(w), height(h) {}
    int area() { return width * height; }
};

继承允许派生类继承基类的特性:

class Square : public Rectangle {
public:
    Square(int side) : Rectangle(side, side) {}
};

标准模板库(STL)

STL 提供容器、算法和迭代器。常用容器包括 vectorlistmap 等:

vector<int> v = {1, 2, 3};
v.push_back(4);
sort(v.begin(), v.end());

算法库包含排序、查找等操作:

auto it = find(v.begin(), v.end(), 3);
if (it != v.end()) {
    cout << "Found at position " << it - v.begin();
}

内存管理

C++ 允许手动内存管理,使用 newdelete

int* p = new int(10);
delete p;

智能指针如 unique_ptrshared_ptr 可自动管理内存:

unique_ptr<int> p(new int(10));

算法基础

算法是解决问题的步骤。常见算法包括排序、搜索和图算法。

排序算法如快速排序:

int partition(vector<int>& arr, int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            swap(arr[i], arr[j]);
        }
    }
    swap(arr[i + 1], arr[high]);
    return i + 1;
}

void quickSort(vector<int>& arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

搜索算法

二分查找适用于已排序数组:

int binarySearch(vector<int>& arr, int target) {
    int left = 0, right = arr.size() - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] == target) return mid;
        if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

动态规划

动态规划用于解决重叠子问题。斐波那契数列是一个经典例子:

int fib(int n) {
    if (n <= 1) return n;
    vector<int> dp(n + 1);
    dp[0] = 0; dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
}

图算法

广度优先搜索(BFS)用于遍历或搜索图:

void bfs(vector<vector<int>>& graph, int start) {
    queue<int> q;
    vector<bool> visited(graph.size(), false);
    q.push(start);
    visited[start] = true;
    while (!q.empty()) {
        int node = q.front();
        q.pop();
        cout << node << " ";
        for (int neighbor : graph[node]) {
            if (!visited[neighbor]) {
                q.push(neighbor);
                visited[neighbor] = true;
            }
        }
    }
}

贪心算法

贪心算法在每一步选择局部最优解。活动选择问题是一个例子:

vector<pair<int, int>> selectActivities(vector<pair<int, int>>& activities) {
    sort(activities.begin(), activities.end(), [](auto& a, auto& b) {
        return a.second < b.second;
    });
    vector<pair<int, int>> result;
    int lastEnd = -1;
    for (auto& activity : activities) {
        if (activity.first >= lastEnd) {
            result.push_back(activity);
            lastEnd = activity.second;
        }
    }
    return result;
}

分治算法

分治算法将问题分解为子问题。归并排序是一个例子:

void merge(vector<int>& arr, int l, int m, int r) {
    vector<int> temp(r - l + 1);
    int i = l, j = m + 1, k = 0;
    while (i <= m && j <= r) {
        if (arr[i] <= arr[j]) temp[k++] = arr[i++];
        else temp[k++] = arr[j++];
    }
    while (i <= m) temp[k++] = arr[i++];
    while (j <= r) temp[k++] = arr[j++];
    for (int p = 0; p < k; p++) arr[l + p] = temp[p];
}

void mergeSort(vector<int>& arr, int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
        merge(arr, l, m, r);
    }
}

算法复杂度分析

算法复杂度描述算法执行时间和空间需求。大 O 表示法用于表示最坏情况复杂度:

  • 线性搜索:O(n)
  • 二分搜索:O(log n)
  • 快速排序:O(n log n) 平均,O(n²) 最坏
  • 归并排序:O(n log n)

实际应用

C++ 广泛应用于游戏开发、高频交易、嵌入式系统等领域。其高效性和灵活性使其成为性能敏感应用的理想选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值