自己手擼一個initializer_list()

//my_initializer_list.h
namespace std
{
  template <class T>
  class my_initializer_list
  {
  public:
    using value_type = T;
    using reference = const T&;
    using const_reference = const T&;
    using size_type = size_t;

    my_initializer_list() noexcept : __begin(nullptr), __size(0) {}
  
    my_initializer_list(const T* __b, size_t __s) noexcept : __begin(__b), __size(__s){}
    
    const T*  begin() const noexcept {return __begin;}
    const T* end() const noexcept {return __begin+ __size;}
    size_t size() const noexcept { return __size;}
  private:
    const T* __begin;
    size_t __size;
  };
}

int main()
{
    int array[] = {1,2,3};
    std::my_initializer_list<int> a = std::my_initializer_list<int>(array,sizeof(array)/sizeof(array[0]));

    for (const int& value : a) 
    {
        std::cout << value << " ";
    }
    return 0;
} 

使用

#include <iostream>
#include <my_initializer_list.h>

class MyArray
{
public:
  MyArray(std::my_initializer_list<int> values)
  {
    size_ = values.size();
    data_ = new int[size_];
    int i = 0;
    for(auto value : values)
    {
        data_[i++] = value;
    }
  }

  void print()
  {
    for (int i = 0; i < size_; ++i) {
        std::cout << data_[i] << " ";
    }
    std::cout << std::endl;
  }

private:
    int* data_;
    size_t size_;
};

int main()
{
    int array[] = {1,2,3,4};
    MyArray arr = MyArray(std::my_initializer_list<int>(array,sizeof(array)/sizeof(array[0])));

    //等價于
    MyArray arr = {1, 2, 3, 4};
    arr.print();
    return 0;
} 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容