嵌入式:C++ Day7

这篇具有很好参考价值的文章主要介绍了嵌入式:C++ Day7。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作业:一、手动封装vector容器

           二、思维导图

一、手动封装vector容器

嵌入式:C++ Day7,c++,开发语言

 源码:

#include <iostream>

using namespace std;

template < typename T >
class My_vector{
private:
    T *first;
    T *last;
    T *end;

public:
    My_vector<T>() : first(new T[2]), last(first), end(first + 2) {}     //无参构造
    My_vector<T>(int size) : first(new T[size]), last(first), end(first + size) {}  //有参构造

    //析构函数
    ~My_vector<T>(){
        delete []first;
    }

    //拷贝构造
    My_vector<T>(const My_vector &other){
        int len = other.last - other.first;
        int size = other.end - other.first;
        this->first = new T[size];
        memcpy(this->first, other.first, sizeof(T) * len);
        this->last = this->first + len;
        this->end = this->first + size;
    }

    //拷贝赋值
    My_vector &operator = (const My_vector &other){
        if(this == &other){
            return *this;
        }
        delete []this->first;
        this->first = other.first;
        this->last = other.last;
        this->end = other.end;
        return *this;
    }

    //返回指定坐标的值
    T &at(int index){
        int len = last - first;
        if(index < 0 || index > len){
            throw -1;
        }
        return first[index];
    }

    //判空
    bool empty(){
        return first == last;
    }

    //判满
    bool full(){
        return last == end;
    }

    //返回第一个元素
    T &front(){
        return *first;
    }

    //返回最后一个元素
    T &back(){
        return *(last - 1);
    }

    //返回容器元素个数
    int size(){
        return last -first;
    }

    //清空vector容器
    void clear(){
        last = first;
        cout << "清空容器成功!" << endl;
    }

    //二倍扩容
    void expand(){
        int size = end - first;
        T *temp = new T[2 * size];
        memcpy(temp, first, size * sizeof(T));
        delete []first;
        first = temp;
        last = first + size;
        end = first + 2 * size;
    }

    //尾插
    void push_back(T data){
        if(full()){
            expand();
        }
        *last = data;
        last++;
        cout << "插入成功!尾插元素为:" << data << endl;
    }

    //尾删
    void pop_back(){
        if(empty()){
            cout << "容器为空,无法删除!" << endl;
            return;
        }
        --last;
        cout << "删除成功!尾删元素为:" << *last << endl;
    }

    //遍历
    void output(){
        if(empty()){
            cout << "容器内无元素!" << endl;
            return;
        }
        int len = last - first;
        cout << "容器内元素为:" << endl;
        for(int i = 0; i < len; i++){
            cout << first[i] << "  ";
        }
        cout << endl;
    }
};
int main()
{
    int n;
    cout << "请输入容器的大小: ";
    cin >> n;
    My_vector<int> v1(n);     //实例化对象 有参构造

    //尾插元素
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    v1.push_back(5);
    v1.push_back(6);
    v1.output();

    //尾删元素
    v1.pop_back();
    v1.pop_back();
    v1.output();

    cout << "第一个元素的值为:" << v1.front() << endl;
    cout << "最后一个元素的值为:" << v1.back() << endl;
    cout << "元素容器个数为:" << v1.size() << endl;
    v1.clear();   //清空容器
    v1.output();
    return 0;
}

二、思维导图

嵌入式:C++ Day7,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-608866.html

到了这里,关于嵌入式:C++ Day7的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Qt开发入门】在Ubuntu下编写C++

            在 Ubuntu 上面编写 C++,本文内容主要介绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一 个 C++源文件。通过编写最简单的示例“Hello,World!”。带领大家学习如何在 Ubuntu 终端下编辑和编译 C++。这里要求大家会在 Ubuntu 上使用 vi/vim,也就是要求大家有一点 Ubuntu 入门的基

    2024年02月11日
    浏览(43)
  • 嵌入式Linux Qt5 (C++)开发栏目概述

    本栏目开始介绍Linux系统下的Qt C++程序开发,资源是以嵌入式为切入点(现在Linux系统下的Qt C++程序开发好像就是应用于嵌入式),那就跟着一起学习 Linux系统下的Qt C++程序开发知识 ,再扩展一下 嵌入式 的知识吧。我这里默认已经 熟悉C++基本语法、熟悉Qt在windows下的使用方

    2024年02月12日
    浏览(43)
  • C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

    1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程,游戏和实际应用环境有一定差异(工具、操作流程),在初级阶段主要是熟悉实际场景,而且多数是通过前端语言进行游戏,对底层软件学习的帮助不大。 Coding Games: PHP、C、

    2024年04月28日
    浏览(77)
  • 【C C++开源库】适合单片机 嵌入式的C语言单元测试库_单片机 单元测试框架

    #define TEST_ASSERT_LESS_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, NULL) #define TEST_ASSERT_LESS_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL) #define TEST_ASSERT_LESS_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((thres

    2024年04月25日
    浏览(47)
  • 嵌入式学习day34 网络

    TCP包头: 1.序号:发送端发送数据包的编号 2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用) TCP为什么安全可靠: 1.在通信前建立三次握手连接     SYN     SYN+ACK      ACK  2.在通信过程中通过序列号和确认号保障数据传输的完整性     本次发送序列号:上次收

    2024年03月10日
    浏览(42)
  • C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

    参考: 麦子学院-嵌入式C语言高级-内存空间 内存类型资源地址、门牌号的代名词 指针:地址的代名词 指针变量:存放指针这个概念的盒子 *P char *p *p; C语言娟译器对指针这个特殊的概念,有2个疑问? 1、分配一个盒子,盒子要多大? 在32bit系统中,指针就4个字节 2、盘子里存放

    2023年04月22日
    浏览(61)
  • 嵌入式:QT Day2

    源码: widget.h second.h widget.cpp second.cpp main.cpp    

    2024年02月15日
    浏览(43)
  • 嵌入式:ARM Day6

    目的:1.输入\\\'a\\\',显示\\\'b\\\',将输入的字符的ASCII码下一位字符输出            2.原样输出输入的字符串 源码: uart4.h  uart4.c main.c 结果1: 结果2: 

    2024年02月12日
    浏览(44)
  • 嵌入式:ARM Day4

     源码:         在上述代码中,int *ptr定义了一个指向整数类型的指针ptr,(int *)将地址0x5000A28强制转换为整数类型的指针,后续可以通过*ptr访问与修改该地址空间中的值。  

    2024年02月12日
    浏览(49)
  • 嵌入式:QT Day1

    源码: widge.h  widge.cpp  main.cpp

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包