面试题

news2025/5/20 1:35:09

用 C++写一个函数,交换两个整型变量

int a = 5, b = 10;
cout << "Before swapping: a = " << a << ", b = " << b << endl;
swapVars<int>(a, b);
cout << "After swapping: a = " << a << ", b = " << b << endl;

double c = 1.23, d = 4.56;
cout << "Before swapping: c = " << c << ", d = " << d << endl;
swapVars<double>(c, d);
cout << "After swapping: c = " << c << ", d = " << d << endl;

用 c++语言,实现先进先出的队列

#include <iostream>

using namespace std;

// 定义队列节点结构体
struct Node {
    int val;  // 节点值
    Node* next;  // 指向下一个节点的指针

    // 构造函数
    Node(int val): val(val), next(nullptr) {}
};

// 定义链式队列
class Queue {
private:
    Node* head;  // 队首指针
    Node* tail;  // 队尾指针

public:
    // 构造函数
    Queue(): head(nullptr), tail(nullptr) {}

    // 判断队列是否为空
    bool isEmpty() {
        return (head == nullptr);
    }

    // 入队操作
    void enqueue(int val) {
        Node* node = new Node(val);
        if (isEmpty()) {
            head = node;
            tail = node;
        } else {
            tail->next = node;
            tail = node;
        }
    }

    // 出队操作
    int dequeue() {
        if (isEmpty()) {
            return -1;
        }
        int val = head->val;
        Node* temp = head;
        head = head->next;
        delete temp;
        return val;
    }

    // 获取队首元素
    int front() {
        if (isEmpty()) {
            return -1;
        }
        return head->val;
    }

    // 获取队列长度
    int size() {
        int count = 0;
        Node* cur = head;
        while (cur) {
            count++;
            cur = cur->next;
        }
        return count;
    }
};

int main() {
    // 创建一个空队列
    Queue q;

    // 将元素依次加入队列
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.enqueue(4);
    q.enqueue(5);

    // 输出队列中的元素
    while (!q.isEmpty()) {
        cout << q.front() << " ";  // 输出队首元素
        q.dequeue();  // 弹出队首元素
    }
    cout << endl;

    return 0;
}

用 c++语言,实现二叉树基本操作。

#include <iostream>

using namespace std;

// 定义二叉树节点结构体
struct TreeNode {
    int val;  // 节点值
    TreeNode* left;  // 左子节点指针
    TreeNode* right;  // 右子节点指针

    // 构造函数
    TreeNode(int val): val(val), left(nullptr), right(nullptr) {}
};

// 创建二叉树
TreeNode* createTree() {
    int val;
    cin >> val;
    if (val == -1) {  // 输入-1表示空节点
        return nullptr;
    }
    TreeNode* node = new TreeNode(val);
    node->left = createTree();  // 递归创建左子树
    node->right = createTree();  // 递归创建右子树
    return node;
}

// 先序遍历
void preOrder(TreeNode* root) {
    if (root) {
        cout << root->val << " ";  // 输出节点值
        preOrder(root->left);  // 递归遍历左子树
        preOrder(root->right);  // 递归遍历右子树
    }
}

// 中序遍历
void inOrder(TreeNode* root) {
    if (root) {
        inOrder(root->left);  // 递归遍历左子树
        cout << root->val << " ";  // 输出节点值
        inOrder(root->right);  // 递归遍历右子树
    }
}

// 后序遍历
void postOrder(TreeNode* root) {
    if (root) {
        postOrder(root->left);  // 递归遍历左子树
        postOrder(root->right);  // 递归遍历右子树
        cout << root->val << " ";  // 输出节点值
    }
}

int main() {
    // 创建二叉树
    TreeNode* root = createTree();

    // 输出各种遍历结果
    cout << "先序遍历结果:";
    preOrder(root);
    cout << endl;

    cout << "中序遍历结果:";
    inOrder(root);
    cout << endl;

    cout << "后序遍历结果:";
    postOrder(root);
    cout << endl;

    return 0;
}

用 C++或 Python 实现观察者模式。

#include <iostream>
#include <vector>

using namespace std;

// 抽象主题类
class Subject {
public:
    virtual void attach(Observer* observer) = 0;  // 添加观察者
    virtual void detach(Observer* observer) = 0;  // 移除观察者
    virtual void notify() = 0;  // 通知观察者
};

// 具体主题类
class ConcreteSubject : public Subject {
private:
    vector<Observer*> observers;  // 观察者列表
    int state;  // 主题状态

public:
    // 添加观察者
    void attach(Observer* observer) {
        observers.push_back(observer);
    }

    // 移除观察者
    void detach(Observer* observer) {
        for (auto it = observers.begin(); it != observers.end(); it++) {
            if (*it == observer) {
                observers.erase(it);
                break;
            }
        }
    }

    // 通知观察者
    void notify() {
        for (auto observer : observers) {
            observer->update(state);
        }
    }

    // 设置主题状态
    void setState(int state) {
        this->state = state;
        notify();  // 状态改变后通知观察者
    }
};

// 抽象观察者类
class Observer {
public:
    virtual void update(int state) = 0;  // 更新观察者状态
};

// 具体观察者类
class ConcreteObserver : public Observer {
public:
    // 更新观察者状态
    void update(int state) {
        cout << "观察者收到主题状态更新,新状态为:" << state << endl;
    }
};

int main() {
    ConcreteSubject* subject = new ConcreteSubject();  // 创建主题对象
    ConcreteObserver* observer1 = new ConcreteObserver();  // 创建观察者对象1
    ConcreteObserver* observer2 = new ConcreteObserver();  // 创建观察者对象2

    subject->attach(observer1);  // 添加观察者1
    subject->attach(observer2);  // 添加观察者2

    subject->setState(1);  // 设置主题状态为1

    subject->detach(observer1);  // 移除观察者1

    subject->setState(2);  // 设置主题状态为2

    return 0;
}
# 抽象主题类
class Subject:
    def attach(self, observer):
        pass

    def detach(self, observer):
        pass

    def notify(self):
        pass

# 具体主题类
class ConcreteSubject(Subject):
    def __init__(self):
        self.observers = []  # 观察者列表
        self.state = 0  # 主题状态

    # 添加观察者
    def attach(self, observer):
        self.observers.append(observer)

    # 移除观察者
    def detach(self, observer):
        self.observers.remove(observer)

    # 通知观察者
    def notify(self):
        for observer in self.observers:
            observer.update(self.state)

    # 设置主题状态
    def set_state(self, state):
        self.state = state
        self.notify()  # 状态改变后

思考一下,怎么抓住目标物体?
在这里插入图片描述

  1. 首先,使用摄像头获取机械臂下方物体的位置和姿态信息。
  2. 根据物体的位置和姿态信息,计算出机械臂末端的目标位置和姿态。
  3. 使用逆运动学求解机械臂需要移动的关节角度,使末端可以到达目标位置和姿态。由于机械臂有两个自由度,需要求解两个关节的角度。
  4. 将机械爪移动到末端,抓取物体
    需要注意的是,机械臂的运动要考虑到安全性和稳定性,需要避免碰撞和过度运动造成的摆动。此外,还需要考虑机械臂和机械爪的精度和可靠性,以确保抓取成功率。

以下是一个基于ROS和MoveIt的Python代码示例,实现了一个2自由度机械臂的抓取任务。

i

mport rospy
import moveit_commander
from geometry_msgs.msg import PoseStamped

# 初始化
rospy.init_node('pick_and_place')
robot = moveit_commander.RobotCommander()
group = moveit_commander.MoveGroupCommander('arm')
gripper = moveit_commander.MoveGroupCommander('gripper')

# 设置目标位置和姿态
target_pose = PoseStamped()
target_pose.header.frame_id = 'base_link'
target_pose.pose.position.x = 0.4
target_pose.pose.position.y = 0.0
target_pose.pose.position.z = 0.1
target_pose.pose.orientation.x = 0.0
target_pose.pose.orientation.y = 0.0
target_pose.pose.orientation.z = 0.0
target_pose.pose.orientation.w = 1.0

# 移动机械臂
group.set_pose_target(target_pose)
plan = group.plan()
group.execute(plan)

# 打开机械爪
gripper.set_joint_value_target([0.04])
plan = gripper.plan()
gripper.execute(plan)

# 移动机械爪到目标位置
target_pose.pose.position.z = 0.07
group.set_pose_target(target_pose)
plan = group.plan()
group.execute(plan)

# 关闭机械爪
gripper.set_joint_value_target([0.0])
plan = gripper.plan()
gripper.execute(plan)

# 移动机械臂回到初始位置
target_pose.pose.position.x = 0.0
target_pose.pose.position.y = 0.0
target_pose.pose.position.z = 0.2
group.set_pose_target(target_pose)
plan = group.plan()
group.execute(plan)

在这个示例代码中,我们使用了ROS和MoveIt来控制机械臂的运动。首先,我们初始化了ROS节点和MoveIt中的RobotCommander、MoveGroupCommander和GripperCommander。然后,我们设置了目标位置和姿态,将机械臂移动到目标位置。接下来,我们打开机械爪,将机械爪移动到目标位置,关闭机械爪,最后将机械臂移动回初始位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半透明反向代理 (基于策略路由)

定义 半透明反向代理一般是指 代理本身对于客户端透明&#xff0c;对于服务端可见。 从客户端视角看&#xff0c;客户端访问的还是服务端&#xff0c;客户端不知道代理的存在。 从服务端视角看&#xff0c;服务端只能看到代理&#xff0c;看不到真实的客户端。 示意图 客户端…

【C语言】switch语句的理解

文章目录一. 基本语法结构二. 几点补充补充一&#xff1a;关于 default 分支补充二&#xff1a;多条匹配执行同一语句补充三&#xff1a;在 case 语句中定义变量的问题三. 几点建议建议一&#xff1a;按执行频率排列 case 语句细节二&#xff1a;简化每种情况对应的操作细节三&…

Node【四】内置模块 【fs模块】

文章目录&#x1f31f;前言&#x1f31f;fs模块&#x1f31f; 使用fs模块&#x1f31f; 异步编程和同步编程&#x1f31f; 异步编程&#x1f31f; 同步编程&#x1f31f;常用操作&#x1f31f; 文件操作&#x1f31f; readFile异步读取文件&#x1f31f; readFileSync同步读取文…

[数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化。GeoPandas是一个Python开源项目&#xff0c;旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型&#xff0c;并使用matplotlib进行绘图。GeoPandas官方仓库地址为&#xff1a;GeoPandas。G…

HTML5 <iframe> 标签、HTML5 <input> 标签

HTML5 <iframe> 标签 实例 使用HTML5 <iframe>标签来标记一个内联框架&#xff1a; <iframe src"http://www.w3cschool.cn"></iframe>尝试一下 浏览器支持 所有主流浏览器都支持 <iframe> 标签。 标签定义及使用说明 <iframe&g…

【数据结构初阶】第五节.栈的详讲

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、栈的基本认识 二、栈模拟实现&#xff1a; 三、栈的实战演练 3.1 有效的括号 3.2 逆波兰表达式 3.3 栈的压入、弹出序列 总结 前言 上一节内容我…

【产品设计】登录功能设计逻辑解析

登录功能是每个产品的基础功能&#xff0c;用户已经习以为常了&#xff0c;但对于产品经理来说&#xff0c;这是打开用户通往产品世界大门的“钥匙”&#xff0c;需要好好设计。 在用户看来&#xff0c;登录像是一个一次性的功能&#xff0c;很多 APP 在手机上登录过一次之后&a…

Linux学习记录——십구 构建进程间通信的信道方案

文章目录1、进程间通信介绍1、目的2、发展2、管道1、原理2、简单模拟实现3、总结3、匿名管道——控制进程4、命名管道1、原理2、模拟实现1、进程间通信介绍 之前所学都是单个进程&#xff0c;多个进程之间如何运转&#xff1f; 1、目的 数据传输&#xff1a;一个进程需要将它…

SpringSecurity之基本原理——过滤器链

前言 前面我们讲解了入门案例&#xff0c;很多小伙伴看完之后&#xff0c;应该也不知道他是如何实现的拦截。接下来&#xff0c;我们看一下SpringSecurity的基本原理是什么&#xff1f; 本质 其实&#xff0c;SpringSecurity的本质上就是一个过滤器链。在启动时&#xff0c;…

我的面试八股(JVM篇)

谈一谈Java内存区域和Java内存模型的理解&#xff1f; / Java内存区域和Java内存模型是一个东西吗&#xff1f; Java内存区域和Java内存模型不是一个东西&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Java内存区域&#xff0c;也就是Java运行时数据区域。是…

Typora自定义主题分享 (Mac风、图片立体感...)

MarkDown 主题分享 文章目录MarkDown 主题分享Ligth-浅色主题主题效果展示安装方式Dark-深色主题主题效果展示安装方式关键字&#xff1a;Typora 、Mac、图片阴影、代码样式、表格 Ligth-浅色主题 主题效果展示 安装方式 下载 Typora 官网 Mo主题 下载地址将Mo.css样式修改为…

Docker容器部署

Docker容器1.Docker概念1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结1.4.安装Docker2.Docker的基本操…

【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

每日刷题记录(十四)

目录第一题&#xff1a;子集解题思路&#xff1a;代码实现&#xff1a;第二题&#xff1a;组合解题思路&#xff1a;代码实现&#xff1a;第三题&#xff1a;全排列解题思路&#xff1a;代码实现&#xff1a;第四题&#xff1a;全排列II解题思路&#xff1a;代码实现&#xff1…

2023年4月传统行业产品经理需要考NPDP吗?含金量高吗?

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

Linux内存管理(七):fixmap详解

源码基于:Linux 5.4 约定: 芯片架构:ARM64 CONFIG_ARM64_VA_BITS:39 CONFIG_ARM64_PAGE_SHIFT:12 0. 前言 内核启动首先会进入汇编阶段,mmu已经启动 (也就是说,当前SOC只能使用虚拟地址访问RAM),paging_init还没有完成调用,在内核启动过程需要访问某些特定的内核模…

SQL综合查询上

目录1、查询输出“高等数学”课程成绩前三名&#xff08;不考虑成绩有重复值的情况&#xff09;的学生的学号&#xff0c;姓名&#xff0c;课程名&#xff0c;系名&#xff0c;成绩。题目代码2、统计各门课程的重修人数&#xff08;包括grade为NULL&#xff09;&#xff0c;要求…

体验了一把ChatGPT4

不得不说ChatGPT对我的学习效率有极大的提升&#xff0c;它就像一位老师&#xff0c;不管有什么问题&#xff0c;都可以得到很好的答案。但是前段时间gpt3.5账号被封了&#xff0c;最近搞了个gpt4。市面上目前好像没啥可以白嫖的账号&#xff0c;基本都是免费使用几次&#xff…

C++11新特性有效总结

目录 语言可用性加强 (读现代C教程有感) nullptr constexpr if/switch 申明强化 &#xff08;C17开始&#xff09; 初始化参数列表 范围for迭代 两种类型推导方式 变长参数模板 SmartPointer Lambda 多线程 (并发与并行) 并发与并行的概念 C11中的并发并行 软件…

基于单片机的温室大棚环境监测系统设计

温室大棚对北方反季节蔬菜的种植具有重要意义。据了解全国各地温室大棚使用集中&#xff0c;但是大棚环境调控方式落后、管理落后、生产效率比较低。针对此问题本文提出了一种基于STM32单片机智能温室大棚控制系统方案&#xff0c;实现环境参数的自动检测&#xff0c;以达到智能…