• 抬起头,继续前进吧,去把这个不完美的故事,变成你成所期望的样子
  • 登山路上我们会放弃很多东西,但这些被我们丢掉在我们登上山顶之际,都会一一回来
  • 不论开发还是逆向,数学水平的高低直接决定了”你的饭碗里有没有肉”
  • 万丈高楼平地起,勿在浮沙筑高台

C++使用initializer_list实现自定义容器类的列表初始化

C++ 菜鸟 11个月前 (11-26) 7618次浏览 已收录 0个评论

一、前言

        之前心血来潮看到了 C++11 的列表初始化特性,自己试了一把,今天就将这个简单的做法分享给大家。
环境:Visual Studio 2017

二、initializer_list 实践

容器类基本都支持列表初始化,例如 vector

std::vector<int> = {1, 2, 3, 4};

现在我们有一个自定义容器类叫 CArray,也想支持这种列表初始化,该怎么办呢?
这里就要用到 initializer_list,要使用它的话需要包含 list 头文件。有了,initializer_list 实现列表初始化就很简单了,我们给 CArray 添加一个参数为的构造函数,
initializer_list 也是一个容器类,我们可以用迭代器来访问它包含的元素,如下这样:

template <typename T1> 
inline CArray<T1>::CArray(std::initializer_list<T1> cinitlistValue)
    noexcept(false)
{
    // 初始化
    Init();

    for (const auto &autoEelement : cinitlistValue)
    {
        m_paArray[m_uiCurrentElementsNum] = autoEelement;
        
        // 检测是否需要扩大 Array 空间
        AddElenmentsNum();
    }
}

最后来测试一下:

CArray<char> ArrayChar = {'a', 'b', 'c', 'd'};

printf("Elements of arrayInt: \r\n");
for (const auto &Element : arrayChar)
{
    printf("%c ", Element);
}
printf("\r\n");

测试结果:
Elements of arrayInt:
a b c d

三、小结

        当然,除了这种列表初始化,initializer_list 也将可变参数函数的实现变得更为简便,关于可变参数的函数就不再演示了,大家可以自己试一下。Happy coding^_^


学习心得 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++使用 initializer_list 实现自定义容器类的列表初始化
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址