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

article/2025/8/4 2:21:03

教程

网上教程很多,都可以在蓝桥云课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.hkcw.cn/article/oqRZPRZlna.shtml

相关文章

rtos,什么意思

RTOS,它的全称是 Real-Time Operating System,中文我们通常称之为“实时操作系统”。 让我们把这个词拆解开来,细细品味: Operating System (操作系统 - OS): 你肯定熟悉我们日常用的 Windows、Linux (桌面版或服务器版)、macOS 等。这些都是操作系统。它们的核心作用是什…

研读论文《Attention Is All You Need》(13)

原文 26 4 Why Self-Attention In this section we compare various aspects of self-attention layers to the recurrent and convolutional layers commonly used for mapping one variable-length sequence of symbol representations ( x 1 , ⋯ , x n ) (x_1,\cdots,x_…

智能体时代的数据安全:企业如何平衡效率与风险

数据来源&#xff1a;企业网D1net 智能体时代的数据安全&#xff1a;企业如何平衡效率与风险&#xff1f; 在数字化转型浪潮中&#xff0c;智能体&#xff08;Autonomous AI Agents&#xff09;正成为企业提升效率的利器。这些能够自主执行任务、分析数据并做出决策的AI系统&…

从模式到架构:Java 工厂模式的设计哲学与工程化实践

一、工厂模式概述 &#xff08;一&#xff09;定义与核心思想 工厂模式&#xff08;Factory Pattern&#xff09;是软件开发中常用的创建型设计模式&#xff0c;其核心思想是将对象的创建过程封装起来&#xff0c;通过工厂类来统一管理对象的创建逻辑。这种模式分离了对象的创…

Torch 和 CUDA 版本不兼容

原因解释 参考&#xff1a;https://stackoverflow.com/questions/76678846/pytorch-version-for-cuda-12-2 nvcc CUDA Toolkit 12.6 Downloads | NVIDIA Developer nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2024 NVIDIA Corporation Built on Fri_Jun_14_…

第九天:java注解

注解 1 什么是注解&#xff08;Annotation&#xff09; public class Test01 extends Object{//Override重写的注解Overridepublic String toString() {return "Test01{}";} }2 内置注解 2.1 Override Override重写的注解 Override public String toString() {ret…

Linux --进程状态

目录 进程状态(宏观) Linux进程状态 进程状态的查看 进程状态(宏观) 为了了解Linux的进程状态&#xff0c;首先我们得了解进程状态&#xff0c;因为不仅仅是在Linux下有进程状态&#xff0c;macos和windows下都有进程状态&#xff0c;这里先解释的是一个宏观概念下的&#xff…

定时任务:springboot集成xxl-job-core(二)

定时任务实现方式&#xff1a; 存在的问题&#xff1a; xxl-job的原理&#xff1a; 可以根据服务器的个数进行动态分片&#xff0c;每台服务器分到的处理数据是不一样的。 1. 多台机器动态注册 多台机器同时配置了调度器xxl-job-admin之后&#xff0c;执行器那里会有多个注…

操作系统学习(十)——文件系统

一、文件系统 在操作系统中&#xff0c;文件系统是用于管理存储设备上数据组织与存取的一种机制。 它是操作系统的重要组成部分&#xff0c;承担着对文件的创建、读写、组织、存储、访问控制等管理任务。 功能&#xff1a; 文件的创建与删除&#xff1b;文件的读写与访问&am…

【Linux】shell的条件判断

目录 一.使用逻辑运算符判定命令执行结果 二.条件判断方法 三.判断表达式 3.1文件判断表达式 3.2字符串测试表达式 3.3整数测试表达式 3.4逻辑操作符 一.使用逻辑运算符判定命令执行结果 && 在命令执行后如果没有任何报错时会执行符号后面的动作|| 在命令执行后…

Codeforces Round 1028 (Div. 2)(ABC)

A. Gellyfish and Tricolor Pansy 翻译&#xff1a; 水母和小花在玩一个叫 “决斗 ”的游戏。 水母有 a HP&#xff0c;花花有 b HP。 它们各有一个骑士。水母的骑士有 c HP&#xff0c;而花花的骑士有 d HP。 他们将进行一轮游戏&#xff0c;直到其中一方获胜。对于 k1、2、.…

智能化程度越高,算法“越狱”也会越来越多

前两天&#xff0c;有关美国人工智能&#xff08;AI&#xff09;公司OpenAI旗下推理大模型o3首次出现“不听人类指挥&#xff0c;拒绝关闭”的消息引发高度关注。这种现象应该不算技术性“错误”&#xff0c;而是算法&#xff08;无意识性&#xff09;“失误”——“算法越狱”…

Redis最佳实践——性能优化技巧之Pipeline 批量操作

Redis Pipeline批量操作在电商应用中的性能优化技巧 一、Pipeline核心原理与性能优势 1. 工作机制对比&#xff1a; sequenceDiagramtitle 常规请求 vs Pipeline请求# 常规模式Client->>Redis: 命令1Redis-->>Client: 响应1Client->>Redis: 命令2Redis--&g…

机器人学基础——正运动学(理论推导及c++实现)

机器人正运动学 机器人正运动学一般是指从机器人的关节位置到基于参考坐标系下末端执行器的位置。 平移变换和旋转变换 平移变换 假设我们有两个坐标系A和B&#xff0c;坐标系A与B的方位相同&#xff0c;xyz轴的指向都是一致的&#xff0c;即没有旋转变换。有一点p&#xf…

玉渊谭天:中方香会行动的三个细节 现场观察与国际反响

在第22届香格里拉对话会上,观察到了几个细节,这些细节揭示了中方在这次对话会上的行动。在第一场全体会议上,国防大学的张弛教授提问美国国防部长如何处理美国联盟与东盟国家之间的关系。柬埔寨等东盟国家代表向张弛表示感谢,认为他的提问触及了关键问题,反映了东盟国家的…

Python-13(永久存储)

创建并打开文件 open(file,mode)函数 该函数用于打开一个文件并返回对应的文件对象。 file参数指定的是文件路径和文件名&#xff0c;如果没有添加路径&#xff0c;那么默认将文件创建在python的主文件夹里面。mode参数指定的是打开的模式&#xff0c;r表示读取&#xff08;…

linux驱动开发(1)-内核模块

内核模块 模块最大的好处是可以动态扩展应用程序的功能而无须重新编译链接生成新的应用程序镜像&#xff0c;在微软的Windows系统上动态链接库DLL&#xff08;Dynamic Link Library&#xff09;&#xff0c;Linux系统上的共享库so&#xff08;shared object&#xff09;文件的…

【ISP算法精粹】动手实战:用 Python 实现 Bayer 图像的黑电平校正

在数字成像领域&#xff0c;图像信号处理器&#xff08;ISP&#xff09;如同幕后英雄&#xff0c;默默将传感器捕获的原始数据转化为精美的图像。而黑电平校正&#xff0c;作为ISP预处理流程中的关键一环&#xff0c;直接影响着最终图像的质量。今天&#xff0c;我们就通过Pyth…

【数据结构】顺序表和链表详解(上)

前言&#xff1a;上期我们介绍了算法的复杂度&#xff0c;知道的算法的重要性同时也了解到了评判一个算法的好与坏就去看他的复杂度(主要看时间复杂度)&#xff0c;这一期我们就从顺序表和链表开始讲起。 文章目录 一&#xff0c;顺序表1&#xff0c;线性表2&#xff0c;顺序表…

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;默认通过 pacman 安装&#xff09;目标工具链&#xff1a; pipxnumpypipsetuptoolswheel &#x1f6e0;️ 安装过程与结果记录…