C ++ 11 initializer_list构造函数,带有自定义向量类的头和cpp文件

时间:2014-10-08 15:08:39

标签: c++ c++11 vector constructor initializer-list

我正在做一个学校项目,我要构建一个自定义矢量类。 并且该类应该能够以几种不同的方式初始化向量。 我一直坚持使用vector的initializer_list初始化。

唯一允许作为元素的值是unsigned int。

#include <initializer_list>
class myvec {
private:
    unsigned int *arr; //pointer to array
    std::size_t n; //size of myvec
public:
    myvec(); // Default contructor
    myvec(std::size_t size); // Creating a vec with # of element as size
    myvec(const myvec&); // Copy constructor
    myvec(const initializer_list<unsigned int>& list);

CPP

#include "myvec.h"
#include <initializer_list>

myvec::myvec() {
    arr = new unsigned int[0];
    n = 0;
}

myvec::myvec(std::size_t size) {
    arr = new unsigned int[size];
    n = size;
}

myvec::myvec(const myvec& vec) {
    arr = new unsigned int[vec.n];
    n = vec.n;
    for (int i = 0; i < vec.n; i++) {
        arr[i]=vec.arr[i];
    }
}

myvec::myvec(const std::initializer_list<unsigned int> list) {

}

我不明白应该如何编写构造函数以使其工作?一直试图在互联网上寻找答案很长一段时间没有成功。

我想从另一个c ++文件中调用initializer_list构造函数 TEST.CPP

myvec a = {1,2,3,4};

2 个答案:

答案 0 :(得分:3)

假设您按值传递std::initializer_list参数(并且可以,它是轻量级的),您可以执行以下操作:

myvec(std::initializer_list<unsigned int> l) : myvec(l.size()) {
  std::copy(std::begin(l), std::end(l), arr);
}

也就是说,您使用列表的size()初始化内部数组,然后使用std::begin()std::end()对其进行迭代,以复制其元素。

答案 1 :(得分:2)

std::initializer_list有3个成员函数:

这就是你所需要的一切。