C++ 核心语法
C++ 是一种多范式编程语言,支持面向对象、泛型和过程式编程。基础语法包括变量声明、数据类型、运算符和控制结构。
变量声明使用 int、float、double、char 等关键字,例如:
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 提供容器、算法和迭代器。常用容器包括 vector、list、map 等:
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++ 允许手动内存管理,使用 new 和 delete:
int* p = new int(10);
delete p;
智能指针如 unique_ptr 和 shared_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++ 广泛应用于游戏开发、高频交易、嵌入式系统等领域。其高效性和灵活性使其成为性能敏感应用的理想选择。
1311

被折叠的 条评论
为什么被折叠?



