我正在做一个学校项目,我要构建一个自定义矢量类。 并且该类应该能够以几种不同的方式初始化向量。 我一直坚持使用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};
答案 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)