当前位置: 首页 > news >正文

蓝桥云课ROS学习C++教程cpp-geeksforgeeks版本

教程

网上教程很多,都可以在蓝桥云课ROS中复习。

#include <bits/stdc++.h>
using namespace std;int main() {// Creating a map of integer keys// and string valuesmap<int, string> m {{1, "Geeks"},{2,"For"}, {3,"Geeks"}};for (auto& p : m)cout << p.first << " " << p.second<< "\n";return 0;
}

 

参数-std=c++11。

代码解析:C++ STL map 容器使用示例

#include <bits/stdc++.h>  // 包含C++标准库的所有头文件(不推荐在生产代码中使用)
using namespace std;      // 使用标准命名空间,避免每次都要写std::int main() {// 创建一个整数键、字符串值的map容器// 使用初始化列表直接初始化mapmap<int, string> m {{1, "Geeks"},  // 键值对1: 1 -> "Geeks"{2, "For"},     // 键值对2: 2 -> "For"{3, "Geeks"}};  // 键值对3: 3 -> "Geeks"// 使用基于范围的for循环遍历map// auto& p会自动推导为pair<const int, string>类型for (auto& p : m) {// 输出每个键值对// p.first是键(int类型)// p.second是值(string类型)cout << p.first << " " << p.second << "\n";}return 0;  // 程序正常结束
}

cpp

#include <bits/stdc++.h> // 包含C++标准库的所有头文件(不推荐在生产代码中使用)
using namespace std; // 使用标准命名空间,避免每次都要写std::
int main() {
// 创建一个整数键、字符串值的map容器
// 使用初始化列表直接初始化map
map<int, string> m {{1, "Geeks"}, // 键值对1: 1 -> "Geeks"
{2, "For"}, // 键值对2: 2 -> "For"
{3, "Geeks"}}; // 键值对3: 3 -> "Geeks"
// 使用基于范围的for循环遍历map
// auto& p会自动推导为pair<const int, string>类型
for (auto& p : m) {
// 输出每个键值对
// p.first是键(int类型)
// p.second是值(string类型)
cout << p.first << " " << p.second << "\n";
}
return 0; // 程序正常结束
}

详细解析:

  1. 头文件包含
    • #include <bits/stdc++.h> 是一个非标准的GCC头文件,它包含了C++标准库的所有头文件。虽然方便但不推荐在生产代码中使用,因为它会显著增加编译时间。更好的做法是只包含需要的头文件,如 #include <iostream> 和 #include <map>
  2. 命名空间
    • using namespace std; 允许直接使用标准库中的名称(如coutmap等),而不需要写std::cout
  3. map容器
    • map<int, string> 声明了一个关联容器,键类型为int,值类型为string
    • map会自动按键排序(默认升序),且键是唯一的。
  4. 初始化
    • 使用初始化列表直接初始化map,创建了三个键值对:
      • 1 -> "Geeks"
      • 2 -> "For"
      • 3 -> "Geeks"
  5. 遍历map
    • for (auto& p : m) 是C++11引入的基于范围的for循环,auto& p会自动推导为pair<const int, string>&类型。
    • p.first访问键,p.second访问值。
  6. 输出
    • 程序会输出:
       
      1 Geeks
      2 For
      3 Geeks
    • 输出是按键升序排列的,因为map默认使用less<int>作为比较函数。

注意事项:

  • 在实际开发中,建议使用更具体的类型声明而不是auto,以提高代码可读性。
  • 如果不需要修改元素,可以使用const auto&来避免不必要的拷贝。
  • 对于大型项目,最好明确包含所需的头文件而不是使用bits/stdc++.h

参考:

教程在这里:https://www.geeksforgeeks.org/cpp-tutorial/云课在这里:https://www.lanqiao.cn/courses/854

本文介绍了C++编程语言的基础知识和ROS机器人开发框架的学习路径。主要内容包括:1. C++基础语法和STL容器使用示例(如map容器);2. C++面向对象特性与ROS开发的结合点;3. 系统化的学习路径设计(分4个阶段);4. 实践项目建议(如导航算法、机器视觉等);5. 效率提升策略(理论实践结合、工具利用等)。文章强调通过项目实战将C++特性与ROS开发深度结合,并提供详细的学习资源和时间管理建议。 


C++ 教程 | 学习 C++ 编程

最后更新时间:2025 年 5 月 17 日

C++ 是一种流行的编程语言,最初作为 C 语言的扩展开发而来,引入了面向对象编程(OOP)范式。自那时起,它已成为许多现代技术的基础,如游戏引擎、网页浏览器、操作系统、金融系统等。


C++ 的特性

为什么学习 C++?

C++ 通常被作为有志程序员的入门语言,但它的价值远不止于此:

  1. 广泛应用:C++ 是操作系统、嵌入式系统、图形用户界面(GUI)以及高频交易(HFT)系统开发中最常用的语言之一。
  2. 支持多级编程:既支持低级编程(如手动内存管理),也支持高级编程(如面向对象编程)。
  3. 语法相似性:与 C、Java 和 C# 的语法相似,便于开发者在不同语言间切换。
  4. 执行速度快:在高级语言中,C++ 的执行速度名列前茅,这在竞赛编程或高性能应用中至关重要。

第一个 C++ 程序

在学习 C++ 之前,让我们通过一个简单的程序快速了解这门语言。以下是一个输出“Hello World”的程序:

 

cpp

#include <iostream>
using namespace std;
int main() {
cout << "Hello World!";
return 0;
}

输出

 

Hello World!

C++ 教程概述

本 C++ 教程提供了全面、系统的学习指南,适合初学者和有经验的程序员。每个主题都通过实际代码示例和实际应用场景进行清晰讲解。


C++ 基础

1. 概述

  • C++ 简介
  • 特性
  • 有趣的事实
  • 设置开发环境

2. 基础语法

  • Hello World 程序
  • 注释
  • 标记(Tokens)
  • 标识符
  • 关键字
  • 变量
  • 数据类型
  • 字面量(Literals)
  • 常量
  • 运算符
  • 输入输出

3. 控制流

  • if 语句
  • if-else 语句
  • if-else-if 阶梯
  • 嵌套 if-else 语句
  • switch 语句
  • 跳转语句
  • for 循环
  • while 循环
  • do…while 循环

4. 函数

  • 函数定义与调用
  • 参数传递
  • 默认参数
  • 递归
  • 内联函数

5. 指针

  • 指针简介
  • 指针的应用
  • 指针运算
  • 悬垂指针、空指针、野指针
  • 引用
  • 指针 vs 引用

6. 数组

  • 数组简介
  • 指向数组的指针
  • 数组作为函数参数
  • 数组大小
  • 多维数组

7. 字符串

  • 字符串简介
  • 字符串数组
  • 字符串函数
  • 字符串连接
  • 子字符串

8. 结构体与联合体

  • 结构体简介
  • 指向结构体的指针
  • C 结构体 vs C++ 结构体
  • 联合体简介
  • 位域
  • 枚举
  • typedef

9. 动态内存管理

  • 动态内存分配
  • new 和 delete 运算符
  • new vs malloc(),delete vs free()
  • 内存泄漏
  • 静态内存 vs 动态内存

C++ 面向对象编程(OOP)

1. 类与对象

  • 类定义
  • 对象创建
  • 访问修饰符
  • 友元类与友元函数
  • 构造函数
  • 析构函数
  • 浅拷贝与深拷贝
  • this 指针

2. 封装与抽象

  • 封装
  • 抽象

3. 多态性

  • 函数重载
  • 函数重写
  • 继承
  • 多继承
  • 虚函数

C++ 模板

  • 模板简介
  • 模板特化
  • using 关键字

C++ 标准模板库(STL)

  • STL 简介
  • 算法
  • 容器
    • Vector
    • Pair
    • Set
    • Map
    • Stack
    • Queue
    • Priority Queue
    • Deque
    • List
    • Forward List
    • Bitset
  • 迭代器

C++ 异常处理

  • 异常处理简介
  • 使用类的异常处理
  • 栈展开(Stack Unwinding)
  • 用户自定义异常

C++ 文件与流

  • 文件与流简介
  • 输入输出重定向

C++ 预处理器

  • 预处理器简介
  • 预处理器指令
    • #include 指令
    • #define 指令
    • 条件预处理器

高级 C++

  • 命名空间
  • 多线程
  • 智能指针
  • 函数回调
  • 信号处理
  • 泛型编程

C++ 面试题

  • Top 50 C++ 面试题与答案
  • Top C++ STL 面试题与答案
  • 30 个 OOP 面试题与答案
  • Top C++ 异常处理面试题与答案

C 与 C++ 的区别

特性CC++
类型过程式编程语言支持过程式和面向对象编程的中间级语言
编程范式仅支持过程式编程支持多范式:过程式、面向对象和泛型编程
数据安全性安全性较低,仅支持过程式编程更安全,支持封装等特性
类与对象不支持类与对象支持类与对象,实现面向对象编程
内存管理手动内存管理(malloc/free)支持手动和自动内存管理(new/delete)
函数重载不支持函数重载支持函数重载
异常处理不支持异常处理支持异常处理(try/catch/throw)
命名空间无命名空间功能支持命名空间,避免名称冲突
输入输出函数使用 scanf/printf使用 cin/cout 等面向对象输入输出流
继承不支持继承支持继承,允许类继承属性和方法
模板支持不支持模板支持模板,实现泛型编程
动态绑定不支持动态绑定支持动态绑定(虚函数)
头文件扩展名使用 .h 扩展名使用 .hpp 或 .h 扩展名
兼容性通常仅限于 C 编程向后兼容 C,允许 C 代码在 C++ 程序中运行
应用领域主要用于系统编程、嵌入式系统和底层编程广泛用于游戏开发、GUI 应用、实时仿真和系统/软件开发

互动学习 C++

如果你觉得内容过于复杂,可以探索免费的 C++ 编程语言指南,这是一个自学的课程。它从语言的基本组件开始讲解,并在每个概念后提供测验和实践问题,帮助你掌握知识。此外,课程末尾还提供最终评估测试,检验你的学习成果。


C++ 相关职业与岗位

根据 Statista 的报告,C++ 在 2024 年将是仅次于 JavaScript、Java 和 C# 的最常用编程语言之一。在常用语言列表中,23% 的开发者使用 C++。许多公司都在寻找熟练的 C++ 开发者,以下是一些示例公司:

  • BOSCH Group
  • Capgemini
  • Amazon
  • Microsoft
  • Accenture
  • IBM
  • Meta
  • Adobe
  • Apple
  • Mozilla
  • Wipro
  • Infosys

希望这个中文版的 C++ 教程能帮你更好地理解和学习这门语言!


在学习C++基础的同时掌握ROS,需要制定系统化的学习路径,将语言特性与机器人开发实践深度结合。以下是分阶段的高效学习方案:

一、C++基础学习阶段(0-3个月)

  1. 核心语法掌握
    • 数据类型与控制流:重点学习整型、浮点型、条件语句(if-else)、循环结构(for/while)等,这是后续ROS节点开发的基础。
    • 面向对象编程:深入理解类与对象、继承、多态等概念,为后续ROS中的自定义消息类型和服务定义打下基础。
    • STL容器与算法:掌握vector、map、list等容器,以及sort、find等算法,这些在ROS数据处理中高频使用。
  2. 实践项目
    • 实现简单控制台程序,如计算器、学生信息管理系统,强化语法和逻辑能力。
    • 开发小型图形界面程序(如使用Qt),为后续ROS可视化工具(RViz)的学习做准备。

二、ROS基础学习阶段(1-2个月)

  1. 环境搭建与核心概念
    • 安装ROS(推荐Noetic或Humble版本),配置开发环境。
    • 掌握节点(Node)、话题(Topic)、服务(Service)、消息(Message)等核心概念,理解ROS的分布式通信机制。
  2. 工具与通信机制
    • 学习RViz可视化工具、rqt工具集,掌握数据可视化与调试技巧。
    • 通过发布/订阅模型实现节点间通信,编写简单的发布者和订阅者节点。
  3. 实践项目
    • 实现键盘控制小车移动,熟悉ROS节点开发和话题通信。
    • 开发激光雷达建图程序,掌握传感器数据处理和SLAM技术基础。

三、C++与ROS深度结合阶段(2-3个月)

  1. 高级功能开发
    • 路径规划与导航:使用ROS Navigation Stack实现机器人自主导航,结合C++编写路径规划算法(如A*、Dijkstra)。
    • 机器视觉集成:通过OpenCV和ROS实现目标检测与跟踪,编写C++代码处理图像数据。
    • 机械臂控制:使用MoveIt!框架和URDF建模,结合C++实现机械臂的运动规划与抓取任务。
  2. 项目实践
    • 开发自动驾驶仿真系统,集成传感器数据、路径规划和决策控制模块。
    • 实现多机器人协同任务,如编队控制或协作搬运,掌握ROS多机通信和C++并发编程。

四、效率提升策略

  1. 理论与实践结合
    • 每学习一个C++特性(如模板、智能指针),立即在ROS项目中应用,如编写自定义消息类型的序列化代码。
    • 通过ROS官方教程(如“21讲入门视频”)和开源项目(如Autoware、Apollo)学习最佳实践。
  2. 工具与资源利用
    • 使用蓝桥云课等在线平台,结合实验和社区讨论,快速解决开发中的问题。
    • 参考《C++ Primer》《ROS机器人编程》等经典书籍,系统化提升理论水平。
  3. 时间管理与计划制定
    • 制定每日学习计划,如“上午学习C++多线程,下午开发ROS多机器人通信节点”。
    • 定期复习和总结,通过博客或技术分享加深理解。

http://www.xdnf.cn/news/755227.html

相关文章:

  • Vue-1-前端框架Vue基础入门之一
  • 6、在树莓派上安装 NTP(Network Time Protocol )服务的步骤
  • Linux --进程状态
  • 论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
  • 《Python语言程序设计》2018 第4章第9题3重量和价钱的对比,利用第7章的概念来解答你
  • 广东WordPress开发公司及服务
  • 2025年渗透测试面试题总结-奇安信[实习]安全服务工程师(题目+回答)
  • 深入探讨redis:万字讲解集群
  • POJO、DTO和VO:Java应用中的三种关键对象详解
  • 重学计算机网络之以太网
  • 北斗导航 | 高级接收机自主完好性监测算法研究进展
  • 适配器模式:让不兼容接口协同工作
  • 雷达中实信号与复信号
  • 学习BI---BI看板的生命周期
  • MobaXterm国内下载与安装使用教程
  • java27
  • Windows如何定制键盘按键
  • 工作流引擎-11-开源 BPM 项目 jbpm
  • 十三、【核心功能篇】测试计划管理:组织和编排测试用例
  • 【存储基础】NUMA架构
  • 【Python Cookbook】文件与 IO(二)
  • unix/linux source 命令,其历史争议、兼容性、生态、未来展望
  • 从前端工程化角度解析 Vite 打包策略:为何选择 Rollup 而非 esbuild。
  • 鸿蒙OSUniApp集成WebGL:打造跨平台3D视觉盛宴#三方框架 #Uniapp
  • C# await与wait的区别
  • 核函数:解锁支持向量机的强大能力
  • NodeJS全栈开发面试题讲解——P3数据库(MySQL / MongoDB / Redis)
  • NLP学习路线图(十五):TF-IDF(词频-逆文档频率)
  • BFS入门刷题
  • Python程序的文件头部声明小结