gpt4 book ai didi

c++ - 如何在 C++ 中处理灵活的数组

转载 作者:太空宇宙 更新时间:2023-11-04 15:30:28 24 4
gpt4 key购买 nike

上下文

所以我一直在尝试使用 C/C++ 中的数组来创建数组可以动态地添加和删除它们的元素。

当然,我认为 C 语言中灵活的数组成员特性是合适的选择。所以我开始试验,如下面的代码所示:

#include <cstdio> // printing stuff
#include <stdlib.h> // memory allocation stuff

// The array type
template <typename structType>
struct Array {
private:
// The structure containing the F.A.M.
struct ArrayStructure { size_t length = 0; structType array[]; }
*arrayStructurePointer, arrayStructure;
constexpr inline static void add() {}

public:
// Constructor
template <typename... types, typename = structType>
explicit Array(types... elements) {
this -> arrayStructurePointer =
(ArrayStructure*) malloc(sizeof(structType));
this -> arrayStructurePointer = &(this -> arrayStructure);
this -> add(elements...);
}

// Destructor
~Array() {
free(this -> arrayStructurePointer);
free(this -> arrayStructure.array);
}

// Add stuff to the array
inline void add(structType element) {
this -> arrayStructurePointer =
(ArrayStructure*) realloc(this -> arrayStructurePointer, sizeof(this -> arrayStructure));
this -> arrayStructurePointer = &(this -> arrayStructure);
this -> arrayStructure.array[this -> arrayStructure.length] = element;
this -> arrayStructure.length += 1;
}
template <typename... types, typename = structType>
inline void add(structType element, types... elements) {
this -> add(element);
this -> add(elements...);
}

// Query an element in the array
constexpr inline structType operator [](size_t index) { return *(this -> arrayStructure.array + index); }
};

int main(int argc, char* argv[]) {
Array<int> array(1, 0, 1);

printf("Array [0]: %i\n", array[0]);
printf("Array [1]: %i\n", array[1]);
printf("Array [2]: %i\n", array[2]);

return 0;
}

这样做的目的是让我了解(可能)vector 的工作原理以及与之相关的挑战。


问题

我只知道向数组添加元素,但即便如此,当我编译和运行代码时,当程序在退出之前结束时会出现巨大的延迟(我认为这是因为内存泄漏)。


问题

所以,问题是:我想通过询问如何构建动态数组来断言我在创建动态数组时遵循的是正确的路径,这些动态数组可以根据请求推送和弹出。

如何正确构建动态数组? 或者

我如何构建自己的 vector 结构?

是否有任何好的资源/PDF 可以教授动态数组(或 vector's)是做的吗?

最佳答案

只需将 std::vector 用于可变长度数组。在 999/1000 的情况下,它比您的手动解决方案更好、更可靠地解决了这个问题。

关于c++ - 如何在 C++ 中处理灵活的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874850/

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