C++实战:从蓝桥杯到ROS2开发
·
C++基础学习路径(针对蓝桥杯和ROS2)
学习C++需要从基础语法开始,逐步过渡到高级特性和应用场景。以下内容适合有C语言基础的学习者,并兼顾蓝桥杯竞赛和ROS2开发需求。
基础语法强化
C++兼容C语言的绝大部分语法,但需要特别注意以下新增特性:
- 引用类型:
int& ref = var;是变量的别名 - 函数重载:同名函数通过参数类型/数量区分
- 默认参数:
void func(int x = 10); - 命名空间:
namespace N { ... }避免命名冲突
示例代码:
#include <iostream>
using namespace std;
void swap(int& a, int& b) { // 引用传递
int tmp = a;
a = b;
b = tmp;
}
int main() {
int x = 5, y = 10;
swap(x, y);
cout << x << " " << y << endl; // 输出:10 5
return 0;
}
面向对象编程
C++的核心特性,必须掌握以下概念:
- 类与对象:
class MyClass { ... }; MyClass obj; - 构造函数/析构函数
- 继承与多态:
virtual函数和override关键字 - 运算符重载:
Vector operator+(Vector& v)
典型应用场景:
class Shape {
public:
virtual double area() = 0; // 纯虚函数
};
class Circle : public Shape {
double r;
public:
Circle(double radius) : r(radius) {}
double area() override { return 3.14*r*r; }
};
STL标准模板库
蓝桥杯高频考点,包含以下组件:
- 容器:
vector,map,set,queue - 算法:
sort(),find(),binary_search() - 迭代器:
vector<int>::iterator it
竞赛常用技巧:
#include <algorithm>
vector<int> v = {3,1,4,2};
sort(v.begin(), v.end()); // 快速排序
auto it = lower_bound(v.begin(), v.end(), 2); // 二分查找
内存管理
区别于C的关键能力:
new/delete动态内存管理- 智能指针:
unique_ptr,shared_ptr - 移动语义:
std::move()减少拷贝开销
ROS2相关示例:
auto node = std::make_shared<rclcpp::Node>("my_node"); // 智能指针创建ROS节点
现代C++特性(C++11/14/17)
提升开发效率的重要特性:
auto类型推导:auto x = 5.0;- Lambda表达式:
[](){ /* code */ } - 范围for循环:
for(auto& item : container)
ROS2回调函数示例:
auto callback = [](const std_msgs::msg::String::SharedPtr msg) {
RCLCPP_INFO(node->get_logger(), "Received: %s", msg->data.c_str());
};
蓝桥杯专项训练
竞赛常见题型需要专项突破:
- 贪心算法:区间调度、背包问题
- DFS/BFS:迷宫问题、树形DP
- 动态规划:最长公共子序列、01背包
- 大数处理:高精度加减乘除
典型例题代码框架:
int dp[N][M]; // DP数组声明
memset(dp, 0, sizeof(dp)); // 初始化
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + val[i][j];
}
}
ROS2开发衔接
将C++应用于机器人开发的关键点:
- 理解节点(Node)、话题(Topic)、服务(Service)概念
- 掌握
rclcpp库的基本接口 - 熟悉消息类型定义与使用
最小ROS2节点示例:
#include "rclcpp/rclcpp.hpp"
class MyNode : public rclcpp::Node {
public:
MyNode() : Node("minimal_node") {
timer_ = create_wall_timer(
std::chrono::seconds(1),
[this]() { RCLCPP_INFO(this->get_logger(), "Hello"); });
}
private:
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char** argv) {
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<MyNode>());
rclcpp::shutdown();
return 0;
}
推荐学习资源
-
书籍:
- 《C++ Primer》全面语法参考
- 《算法竞赛入门经典》蓝桥杯必备
- 《ROS2高效编程》机器人开发实战
-
在线平台:
- 洛谷/LeetCode算法题库
- ROS2官方文档(https://docs.ros.org/)
- 蓝桥杯历年真题库
-
开发环境:
- VSCode + C++插件
- Ubuntu 22.04 + ROS2 Humble
- CLion(调试竞赛代码)
更多推荐



所有评论(0)