精华内容
下载资源
问答
  • 自定义数据结构

    2013-06-15 16:19:42
    网上实现自定义数据结构时间接使用了其他高级的结构,本次我仅仅使用了数组实现了泛型 stack queue dictionary 三种数据结构,且实现了IEnumerable 接口。
  • SelfDefiningDataStructure Java语言自定义模拟实现相关数据结构 自定义数据结构的学习,加深对数据结构的理解
  • 易语言学习调用DLL返回自定义数据结构的方法源码,test,测试子程序,RtlMoveMemory,取指针到字节集
  • 自定义数据结构的好处在于,STL在不同平台的性能不一样,而且缺一些需要的数据结构,例如C++11之前没有HashMaps。同时专门的数据结构会比一般化的快。 Vector SmallVector 类似std::

    主要参考资料:

    http://llvm.org/docs/ProgrammersManual.html

    http://llvm.org/docs/doxygen/html/

    自定义数据结构的好处在于,STL在不同平台的性能不一样,而且缺一些需要的数据结构,例如C++11之前没有HashMaps。同时专门的数据结构会比一般化的快。

    Vector

    SmallVector

    类似std::Vector。首先是固定容量的,其次可以如果达到上限还add元素,则会增大。


    SmallVector<Instruction *, 10> worklist;
    Instruction *I = ...;
    worklist.push_back(I);
    I = worklist.pop_back_val();

    SmallVector的插入性能明显优于 std::vector,提升可达1倍左右。


    Maps

    DensMap

    DenseMap 是使用 quadratically probed HashMap,用 H+1^2, H+2^2, H+3^2...解决哈希冲突。时间高效,但是空间比一般HashMap用的多。插入后会导致 Iterator 失效。与HashMap相比插入时间相同,查询有明显提升。

    StringMap

    专门用于String作为Key的Map。插入是使用 GetOrCreateValue()。效果StringMap<Data>的效果却不如std::map<std:;string, Data>好。


    Set

    SmallSet

    SmallSet<int*,1500>性能最差, SmallSet<int*, 10>与 set<int*>类似

    展开全文
  • 用于创建自定义数据结构的大学项目 这是我发现的哈瓦那大学(uh =哈瓦那大学)的一个旧项目,我的目标是使用更好的编码实践对其进行更新。 也许我可以用结果创建一个.Nuget包。 实施的数据结构 列表 堆 Avl 字典
  • 实现了一个自定义数据结构 —— 树,该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于...
  • 使用 vue-treeselect 自定义数据结构转换 使用这个插件时当数据结构和官方文档的数据结构不一致,需要进行转化。 示例 // 引入相关包文件 import Treeselect from '@riophae/vue-treeselect' import '@riophae/...

    使用 vue-treeselect 自定义数据结构转换

    • 使用这个插件时当数据结构和官方文档的数据结构不一致,需要进行转化。
    • 示例
     // 引入相关包文件
    import Treeselect from '@riophae/vue-treeselect'
    import '@riophae/vue-treeselect/dist/vue-treeselect.css'
    <template>
    	<treeselect
        v-model="departmentData.higherUp"
        :options="deptTreeData1"
        placeholder="请选择上级菜单"
        :normalizer="normalizer"
        />
    </template>
    <script>
    	export default {
    		// 注册组件
    		components: { Treeselect },
    		data() {
    			return {
    				deptTreeData1:[]
    			}
    		},
    		methods: {
    			normalizer(node) {
                      // 去掉children=[]的children属性
                      if (node.children && !node.children.length) {
                        delete node.children
                      }
                      return {
                        id: node.deptId,
                        label: node.deptName,
                        children: node.children
                      }
                }
    		}
    	}
    </script>
    
    • 说在最后吐槽下 这个官方文档,不知道官方没写 normalizer 相关介绍还是我没有找到。
      希望能帮小伙伴
    展开全文
  • * 第3章 自定义数据结构 结构体共同体和枚举类型 结构体定义 将不同种类型的数据有序地组合在一起构造出一个新的数据类型这种形式称为结构体 结构体是多种类型组合的数据类型 struct 结构体名 成员列表 struct ...
  • VB 之 精 彩 编 程-VB自定义数据结构的传输转换
  • 本文展示通过序列化将自定义数据结构序列化到硬盘文件中,再从文件反序列出来还原数据信息。 Qt中序列化与反序列化 Qt中使用QDataStream类实现对象序列化; 序列化: QFile file("file.rx"); //定义文件路径 ...

    文章目录

    定义

    Qt中序列化与反序列化

    序列化:

    反序列化:

    自定义数据结构序列化与反序列化

    项目结构

    数据结构信息

    执行效果

    项目源码

    开发环境


    定义

    序列化:将对象或数据结构转换为二进制序列
    反序列化:二进制序列转换为对象或数据结构

    使对象或数据结构更方便地在网络上传输或者保存在本地文件中。

    本文展示通过序列化将自定义数据结构序列化到硬盘文件中,再从文件反序列出来还原数据信息。

    Qt中序列化与反序列化

    Qt中使用QDataStream类实现对象序列化;

    序列化:

    QFile file("file.rx");           //定义文件路径
    file.open(QIODevice::WriteOnly); //以只写模式打开
    QDataStream out(&file);          //定义数据流
    out << QString("hello world!");  //写入内容

    反序列化:

    QFile file("datas.rx");         //定义文件路径
    file.open(QIODevice::ReadOnly); //以只读模式打开
    QDataStream in(&file);          //定义数据流
    QString str;                    //创建字符串用于接收
    in >> str;                      //读出内容

    自定义数据结构序列化与反序列化

    QDataStream只能序列化基本类型,对于自定义类或者数据结构则需要在自定义类中声明并实现友元函数friend:

    friend QDataStream &operator<<(QDataStream &stream, const ParamsData &data);  //序列化
    friend QDataStream &operator>>(QDataStream &stream, ParamsData &data);        //反序列胡

    QDataStream本身支持的数据类型如下:

    bool
    qint8
    qint16
    qint32
    qint64
    quint8
    quint16
    quint32
    quint64
    float
    double
    const char *
    QBitArray
    QBrush
    QByteArray
    QColor
    QCursor
    QDate
    QDateTime
    QEasingCurve
    QFont
    QGenericMatrix
    QHash<Key, T>
    QIcon
    QImage
    QKeySequence
    QLinkedList<T>
    QList<T>
    QMap<Key, T>
    QMargins
    QMatrix4x4
    QPair<T1, T2>
    QPalette
    QPen
    QPicture
    QPixmap
    QPoint
    QQuaternion
    QRect
    QRegExp
    QRegularExpression
    QRegion
    QSize
    QString
    QTime
    QTransform
    QUrl
    QVariant
    QVector2D
    QVector3D
    QVector4D
    QVector<T>

    原文地址:https://doc.qt.io/qt-5/datastreamformat.html

    项目结构

    CommonData类:公共类,用于存储数据;方便项目中其他类文件调用,数据使用静态存储;

    MainWindow类:使用CommonData中静态数据,包含UI界面,实现数据的序列化与反序列化;

    数据结构信息

    根据以上描述,定义如下数据struct,并声明实现friend友元函数:

    注意:读和写的变量顺序必须一致

    //定义静态数据结构
    static struct ParamsData{
    	QString m_paramFile="qwe";
    	int m_imagenubth=-1;
    	bool m_SysInitDone=false;
    	int m_grabimgIdx=112;
    	float m_axisNum=123.234f;
    	bool m_homeState=true;
    	QPoint mark1_Center=QPoint(23,23);
    	double mark1_Radius=5.0008;
    
    	friend QDataStream &operator<<(QDataStream &stream, const ParamsData &data)//序列化
    	{
    		stream << data.m_paramFile;
    		stream << data.m_imagenubth;
    		stream << data.m_SysInitDone;
    		stream << data.m_grabimgIdx;
    		stream << data.m_axisNum;
    		stream << data.m_homeState;
    		stream << data.mark1_Center;
    		stream << data.mark1_Radius;
    		return stream;
    	}
    
    	friend QDataStream &operator>>(QDataStream &stream, ParamsData &data)//反序列化
    	{
    		stream >> data.m_paramFile;
    		stream >> data.m_imagenubth;
    		stream >> data.m_SysInitDone;
    		stream >> data.m_grabimgIdx;
    		stream >> data.m_axisNum;
    		stream >> data.m_homeState;
    		stream >> data.mark1_Center;
    		stream >> data.mark1_Radius;
    		return stream;
    	}
    }paramsData;

    界面如下:

    CommonData.h

    #ifndef COMMONDATA_H
    #define COMMONDATA_H
    
    #include <QObject>
    #include <QDataStream>
    
    //用于存储公共数据
    class CommonData : public QObject
    {
        Q_OBJECT
    public:
        explicit CommonData(QObject *parent = nullptr);
    
    public:
        //定义静态数据结构
        static struct ParamsData{
            QString m_paramFile="qwe";
            int m_imagenubth=-1;
            bool m_SysInitDone=false;
            int m_grabimgIdx=112;
            float m_axisNum=123.234f;
            bool m_homeState=true;
            QPoint mark1_Center=QPoint(23,23);
            double mark1_Radius=5.0008;
    
            friend QDataStream &operator<<(QDataStream &stream, const ParamsData &data)//序列化
            {
                stream << data.m_paramFile;
                stream << data.m_imagenubth;
                stream << data.m_SysInitDone;
                stream << data.m_grabimgIdx;
                stream << data.m_axisNum;
                stream << data.m_homeState;
                stream << data.mark1_Center;
                stream << data.mark1_Radius;
                return stream;
            }
    
            friend QDataStream &operator>>(QDataStream &stream, ParamsData &data)//反序列化
            {
                stream >> data.m_paramFile;
                stream >> data.m_imagenubth;
                stream >> data.m_SysInitDone;
                stream >> data.m_grabimgIdx;
                stream >> data.m_axisNum;
                stream >> data.m_homeState;
                stream >> data.mark1_Center;
                stream >> data.mark1_Radius;
                return stream;
            }
        }paramsData;
    
    };
    
    #endif // COMMONDATA_H

    CommonData.cpp

    #include "commondata.h"
    
    CommonData::CommonData(QObject *parent) : QObject(parent)
    {
    
    }
    
    CommonData::ParamsData CommonData::paramsData;//此句需要,否则报错

    MainWindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        void PrintContent();
    
    private slots:
        void on_btn_Read_clicked();
        void on_btn_Write_clicked();
        void on_btn_ChangeVal_clicked();
    
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H

    MainWindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "commondata.h"
    #include <QFile>
    #include <QDebug>
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_btn_Read_clicked()// 从文件中读取/初始化数据
    {
        QFile file("data.sx");//文件在程序运行目录下
        if(file.exists())//如果文件存在 则从文件读取数据
        {
            file.open(QIODevice::ReadOnly);
            QDataStream input(&file);
            input >> CommonData::paramsData;
            file.close();
    
            //打印出各个变量的值
            qDebug() << QStringLiteral("打印出文件中读出的值.......");
            PrintContent();
        }
        else//如果文件不存在 则使用初始化数据
        {
            //打印出各个变量的值
            qDebug() << QStringLiteral("打印出初始化的值.......");
            PrintContent();
        }
    }
    
    void MainWindow::on_btn_Write_clicked()//将数据写入文件保存
    {
        QFile file("data.sx");//文件在程序运行目录下
        file.open(QIODevice::WriteOnly);
        QDataStream output(&file);
        output << CommonData::paramsData;
        file.close();
    }
    
    void MainWindow::on_btn_ChangeVal_clicked()//改变数据的值,查看是否能正确写入文件并读出
    {
        CommonData::paramsData.m_axisNum=234.123f;
        CommonData::paramsData.m_homeState=false;
        CommonData::paramsData.m_paramFile="wer";
        CommonData::paramsData.m_grabimgIdx=113;
        CommonData::paramsData.m_imagenubth=168;
        CommonData::paramsData.mark1_Center=QPoint(66,88);
        CommonData::paramsData.mark1_Radius=6.08080808;
        CommonData::paramsData.m_SysInitDone=true;
        qDebug() << QStringLiteral("打印改变后的值.......");
        PrintContent();
    }
    
    void MainWindow::PrintContent()//打印数据 便于调试查看
    {
        qDebug() << CommonData::paramsData.m_axisNum;
        qDebug() << CommonData::paramsData.m_homeState;
        qDebug() << CommonData::paramsData.m_paramFile;
        qDebug() << CommonData::paramsData.m_grabimgIdx;
        qDebug() << CommonData::paramsData.m_imagenubth;
        qDebug() << CommonData::paramsData.mark1_Center;
        qDebug() << CommonData::paramsData.mark1_Radius;
        qDebug() << CommonData::paramsData.m_SysInitDone;
    }

    执行效果

    /*
        执行步骤:
        1、没有文件,初始化数据结构
        2、改变数据结构的值
        3、写入文件
        4、读取文件,读出的为更改后的值
    */
    "打印出初始化的值......."
    123.234
    true
    "qwe"
    112
    -1
    QPoint(23,23)
    5.0008
    false
    "打印改变后的值......."
    234.123
    false
    "wer"
    113
    168
    QPoint(66,88)
    6.08081
    true
    "打印出文件中读出的值......."
    234.123
    false
    "wer"
    113
    168
    QPoint(66,88)
    6.08081
    true

    项目源码

    GitHub地址:lizhifun/QtSerialize

    开发环境

    Author:Lizhifun

    OS:Windows 10 家庭中文版

    Compiler:Microsoft Visual C++ Compiler 15.9.28307.1259(amd64)

    Kit:Desktop Qt 5.14.2 MSVC2017 64bit

    Qt Creator:4.11.1

    展开全文
  • sercurity + oauth2 + durid + redis 实现用户认证和资源控制,本例子中包含对oauth2异常的统一处理格式,使用redis存储token提升访问性能等。还包含数据库建表语句。
  • 一、引言最近在自己的项目中,定义了一个自定义数据结构,在使用这个数据结构的过程中,创建了许多该结构对象,想要使用 std::set 去重处理,然而此时就发生了编译错误: error C2678: 二进制“<”: 没有找到接受...

    一、引言

    最近在自己的项目中,定义了一个自定义数据结构,在使用这个数据结构的过程中,创建了许多该结构对象,想要使用 std::set 去重处理,然而此时就发生了编译错误:

    error C2678: 二进制“<”: 没有找到接受“const Point”类型的左操作数的运算符(或没有可接受的转换)

    编译报错

    二、探索

    那么这是什么原因呢?

    跟进编译错误的我发现,这应该就是 < 操作符未重载的问题,也就是说:

    在使用 std::set 的过程中, std::set 会默认调用自定义数据结构的 operator< 操作符函数来比较两个对象的大小来进行排序(std::set 是有序的关联容器)

    于是我就添加了如下的自定义结构定义:

    // User defined data structure
    struct Point
    {
        // Default constructor
        Point() : x(0), y(0) {}
        // Constructor
        Point(int x, int y) : x(x), y(y) {}
        // Operator < override
        bool operator<(const Point& rhs)  {
            return (x + y) < (rhs.x + rhs.y);
        }
        // Member
        int x;
        int y;
    };
    

    让我们再进行编译:

    error C2678: 二进制“<”: 没有找到接受“const Point”类型的左操作数的运算符(或没有可接受的转换)

    诶!怎么还是同样的错误,并且提示没有找到接受 const Point 类型的左操作数的运算符,难道我们定义的重载操作符不能使用吗?

    我开始查询资料:

    在C++中,只有被声明为const的成员函数才能被一个const类对象调用。

    当我看到了这一句的时候,我才醒悟过来,我们的操作符函数需要被定义成安全的 const 成员函数,其中 std::set 默认调用了不修改自定结构的值的 operator< 操作符,因此我们应该提供 const 版本的操作符重载版本:

    // Operator < override
    bool operator<(const Point& rhs) const {
        return (x + y) < (rhs.x + rhs.y);
    }

    当修改之后我们再编译,发现终于可以通过了。

    三、总结

    在利用自定义数据结构套用 STL 的时候,需要对 STL 的模板特性有一定的了解。

    比如说,std::set 是有序的,它就需要你重载一个operator< 操作符;再比如说,你想要利用 std::find 来将一个 std::vector 中的自定义数据结构对象进行查找,这里就隐含需要调用自定义数据结构的operator==操作符。

    一切看似奇怪的行为,其背后都有着这样或那样的必然原因。

    展开全文
  • NULL 博文链接:https://tqywork.iteye.com/blog/2394855
  • 局部变量 数据结构, 数据结构 .局部变量 标题, 文本型 标题 = 到文本 (取结构尺寸_GlobalSize (数据结构)) 调试输出 (标题) .子程序 取自定义数据长度_LocalSize .局部变量 数据结构, 数据结构 .局部变量 标题, ...
  • 本期主题:自定义数据结构 我们在前面的几篇博客中已经叙述过C++中的一些关于数据类型的知识,包括基本数据类型(整型数、浮点数、字符、布尔型等)还有复合类型(引用、指针)。 这些都属于C++内置类型,其实我们...
  • 本资源 为SQL脚本文件 上面的代码可以让你很快明白oracle的自定义结构和表类型的使用方法,相信不会让你失望的。资源附实验报告。
  • 精彩编程与编程技巧-VB自定义数据结构的传输转换 ...
  • 自定义个一个数据结构,类似数组,每个成员4字节,记录内存地址 每个成员是一个内存地址,成员内存结构 +0=数据类型 +4实际数据 如果是字节集,+4是数据长度+8是实际数据,如果是文本型,+4是实际数据,以\0为结尾 如果对...
  • 定义一个结构体 struct myStruct { int a; float b; };12345 ...connect(this, SIGNAL(m_signal(myStruct)), this, SLOT(m_slot(myStruct)));...通过Q_DECLARE_METATYPE声明自定义的结构体 stru
  • 连续的内存地址空间,访问的效很高,内置数组,元素可以是对象,接口自定义。 链表 内存地址空间不是连续的,访问效率低下,节点类和链表类 堆栈 可以使用链表实现,先进后出,后进先出 队列 树 ...
  • 这是我自定义的一个类: ``` class ConcentratorInfo : public QObject { Q_OBJECT public: explicit ConcentratorInfo(QObject *parent = 0); public: //集中器id QString id; //集中器...
  • 自定义数据结构使用sort函数排序

    千次阅读 2016-05-02 14:42:54
    //总的来说就是使用sort函数来排序,在使用自定义数据类型时指定比较规则就可以了 #include #include #include #include //算法头文件 using namespace std; typedef struct node { double data; int id; }NODE;...
  • 自定义个一个数据结构,类似数组,每个成员4字节,记录内存地址每个成员是一个内存地址,成员内存结构 0=数据类型 4实际数据如果是字节集, 4是数据长度 8是实际数据,如果是文本型, 4是实际数据,以\0为结尾如果对指针操作...
  • **对Id域进行排序** Comparator<Investor> investorComparator= (investor1, investor2) -> investor1.getId().compareTo(investor2.getId());
  • VB、C与C++、C#.NET中自定义数据结构的比较与应用。
  • 我想,返回自定义数据如: ``` { "code":0, "msg":"no message", "result":{ "jwt":"opooj90kkkllj" } } ``` 求教,如何实现,尝试了用springmvc的拦截器处理,发现拦截器不起作用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 680,809
精华内容 272,323
关键字:

自定义数据结构

数据结构 订阅