gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:16:36 25 4
gpt4 key购买 nike

我正在做一个学校项目,我要在其中构建一个自定义 vector 类。该类应该能够以几种不同的方式初始化 vector 。我一直坚持使用 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 构造函数测试.cpp

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

最佳答案

假设您要通过 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()复制其元素。

关于C++11 initializer_list 构造函数,带有自定义 vector 类的头文件和 cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com