如何处理C 中的灵活数组

How to handle flexible Arrays in C++

本文关键字:数组 何处理 处理      更新时间:2023-10-16

上下文

所以我一直在玩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]: %in", array[0]);
    printf("Array [1]: %in", array[1]);
    printf("Array [2]: %in", array[2]);
    return 0;
}

这一点是我要(可能)vector的工作方式及其相关的挑战。


问题

我只达到了数组中添加元素,但即使这样,当我编译和运行代码时,当程序退出之前结束时会有大延迟(我认为这是因为内存泄漏)。


问题

所以,问题:我想断言我正在遵循正确的路径,以创建推动&amp;的动态阵列通过要求如何构建动态数组来应要求。

如何正确构建动态数组?

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

是否有任何好的资源/PDF教导如何制作动态数组(或 vector ')?

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