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

鲅鱼圈网站怎么做app推广接单平台有哪些

鲅鱼圈网站怎么做,app推广接单平台有哪些,资源下载类网站源码,新媒体运营工作内容目录 emplace emplace和push区别 例:list的模拟实现部分代码 默认移动构造和移动赋值 默认函数的控制 小知识 emplace C11以后STL容器新增了emplace系列接口,均为模版可变参数,功能是插入,但总体而言比push和insert更高效&am…

目录

emplace

emplace和push区别

例:list的模拟实现部分代码

默认移动构造和移动赋值

默认函数的控制

小知识


emplace

C++11以后STL容器新增了emplace系列接口,均为模版可变参数,功能是插入,但总体而言比push和insert更高效,而且有更新的玩法,假设一个容器container<T>,emplace可以支持直接插入构造T对象的参数,可以直接在容器空间构造T对象。

emplace和push区别

对于非move的右值,emplace都是直接在容器中构造,push要先在容器外构造再移动构造。

例:list的模拟实现部分代码

template<class T>
struct list_node //对于
{
    list_node<T>* _prev = nullptr;
    list_node<T>* _next = nullptr;
    T _val;

    list_node(T&& val = T())
        :_val(move(val))
    { }

    template<class... Args>
    list_node(Args&&... args)
        :_val(std::forward<Args>(args)...) //使用完美转发,否则右值表达式变左值
    {}

};

list类中的insert和emplace

iterator insert(iterator pos, const T& val)
{
    Node* newnode = new Node(val);

    newnode->_prev = pos._node->_prev;
    newnode->_next = pos._node;
    pos._node->_prev->_next = newnode;
    pos._node->_prev = newnode;

    _size++;
    return iterator(newnode);
}

iterator insert(iterator pos, T&& val)
{
    Node* newnode = new Node(move(val));

    newnode->_prev = pos._node->_prev;
    newnode->_next = pos._node;
    pos._node->_prev->_next = newnode;
    pos._node->_prev = newnode;

    _size++;
    return iterator(newnode);
}

template<class... Args>
void emplace_back(Args&&... args)
{
    emplace(end(),std::forward<Args>(args)...);//包扩展的第二种展开方式
}

template<class... Args>
iterator emplace(const iterator pos,Args&&... args)
{
    Node* newnode = new Node(std::forward<Args>(args)...);//包扩展的第二种展开方式,这里可以将参数直接在结点类中构造成新结点,只需一次构造即可。

    newnode->_prev = pos._node->_prev;
    newnode->_next = pos._node;
    pos._node->_prev->_next = newnode;
    pos._node->_prev = newnode;

    _size++;
    return iterator(newnode);
}

默认移动构造和移动赋值

C++类中原本有6个默认成员函数:构造函数/析构函数/拷贝构造函数/拷贝赋值重载/取地址重载/const取地址重载。

C++11中新增了两个默认成员函数,移动构造函数和移动赋值运算符重载。

规则:1.如果未实现移动构造函数,且未实现析构函数、拷贝构造、拷贝赋值重载中的任意一个,编译器就会自动生成一个默认移动构造函数。对内置类型执行浅拷贝,对自定义类型调移动构造,如果未实现移动构造,那会调拷贝构造。

2.如果未实现移动赋值重载函数,且未实现析构函数、拷贝构造、拷贝赋值重载中的任意一个,编译器会自动生成一个默认移动赋值函数。对内置类型执行浅拷贝,对自定义类型调移动赋值,如果未实现移动赋值,调拷贝赋值。(默认移动赋值和默认移动构造相似)

   

注:如果写了移动构造 or 移动赋值,编译器就不会自动生成拷贝构造和拷贝赋值。

默认函数的控制

1.如果想要使用某个默认函数,但这个函数未默认生成。例:写了拷贝构造,就不会生成移动构造了。   那么可以使用default关键字显示指定移动构造生成。

类名(右值引用参数列表) {} = default    就是函数声明+ = default

2.如果想要限制某些默认函数的生成,C++11中可以在函数声明后加 = delete,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数。

小知识

1.模运算% 要求两边为整数  结果与第一个操作数的正负相同。 

如:-5%3 = -2      -5%-3 = -2     5%-3 = 2

2.‘1’占一个字节    “1”占两个字节,‘\0’也占字节

http://www.dtcms.com/wzjs/501785.html

相关文章:

  • 网站建设开发招标书如何做网站推广私人
  • 宜春做网站公司怎么样重庆网站seo好不好
  • 新的网站平台如何做地推搜索量查询
  • 网站开发的时间流程最近的疫情情况最新消息
  • 免费网站模板的制作方法长沙seo网络优化
  • 网站的层级网络推广员上班靠谱吗
  • 嵊州门户网站搜索引擎营销的特点包括
  • 网站建设维护费用网店代运营哪个好
  • 充值网站建设台湾新闻最新消息今天
  • 做网站和易语言国内最好的seo培训
  • 徐州城乡建设局网站一起来看在线观看免费
  • 如需郑州网站建设张家界seo
  • 上海优化公司百度seo推广价格
  • wordpress 社区潍坊百度关键词优化
  • 网站建设建站网易互客今日头条新闻最新
  • 上海高端网站设计公司免费制作自己的网站
  • 本科自考和成考的区别短视频seo厂家
  • 做那个的网站新疆疫情最新情况
  • 物流网站公司中央人民政府网
  • 深圳专业网站建设多少钱上海网站建设哪家好
  • 网页制作专业用语青岛网站关键词优化公司
  • 电商网站seo怎么做太原百度推广排名优化
  • 网站平面图要怎么做seo的优化原理
  • v9双语版网站怎么做抖音推广网站
  • 网站建设素材包网络广告代理
  • 省政府网站管理与建设方案品牌型网站设计推荐
  • 网站建设手机站域名解析
  • 企业网站制作费做分录举一个网络营销的例子
  • 个人网站要怎么做军事最新消息
  • 陕西省城乡住房和建设厅网站鼓楼网页seo搜索引擎优化