【问题标题】:C++ - Initialize array of pointers within a constructorC++ - 在构造函数中初始化指针数组
【发布时间】:2014-12-09 01:47:44
【问题描述】:

我需要一个 char * 数组定义为类的属性,并在类的构造函数中使用长度对其进行初始化。例如:

Foo.h:

class Foo{
    public:
        char * array[1]    // declare the array here, syntax unsure
        Foo(int length);
}

Foo.cpp:

Foo::Foo(int length){
    array[length]      // set the length of the array here, syntax unsure
}

不确定语法...我只看到了带有长度的指针数组的声明。我想知道如何先声明它,然后再设置/重新声明一个新的长度。

【问题讨论】:

    标签: c++ arrays pointers c++11


    【解决方案1】:

    如何使用动态数组

    使用std::vector

    class Foo{
    public:
        std::vector<char*> array;
        Foo(int length) : array(length) {}
    }
    

    在:

    array(length) 
    

    您将使用length 默认构造char* 构造一个容器。您甚至可以使用the other 有用的构造函数之一。具体来说,如果您想定义元素 xlength 副本,您可以使用:

    array(length, x)
    

    然后,您最终可以使用push_back/emplace_back 将它们推入。

    一些小改动

    如果char* 在语义上是一个字符串,那么您应该使用std::vector&lt;std::string&gt;

    如果你描述的类是最小的,那么你可以简单地使用:

    using Foo = std::vector<std::string>;
    

    类型别名不会创建新类型,只会创建一个新的类型别名

    【讨论】:

    • 注意:using 不会创建新类型,而class Foo 会(这对于重载等很重要)
    • 对于vector,如果我想在构造函数中设置长度(我需要先计算其中的长度),我应该调用哪个函数? .resize(length) 还是 .reserve(length)?
    • 你应该将长度传递给构造函数。
    • @Fenwick “设置长度”是什么意思?请参阅 reserveresize 的文档。
    • 您应该改写将保留空间,然后最终将它们放入句中。您正在使用的 vector 构造函数不只是保留空间,而是用 length 元素填充它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多