如何在类中声明预终止长度的向量

How do I declare a vector of pretermined length in a class?

本文关键字:终止 向量 声明      更新时间:2023-10-16

这让我绕弯。所有关于向量的文档都非常深入。

在一个类中,我想声明一个长度等于我已经声明的字符串长度的向量。这听起来很简单。

如果我使用:

class Test {
private:
    size_t size = 10;
    std::vector<int> array(size); 
};

我得到"只能在类中初始化静态常量积分数据成员"

如果我:

std::vector<int> array(anarray.length()); 

我得到的非常无益:

错误

C2061:语法错误:标识符"anarray"

我该怎么做?

类内初始化需要使用type var = value;语法或统一初始化语法。

根据您的需要,使用type var = value;语法更合适。

class Test {
  private:
    std::size_t size = 10;
    std::vector<int> array = std::vector<int>(size); 
};

您可以使用以下命令初始化size

    std::size_t size{10};

但是,如果您使用

    std::vector<int> array{size};

它将尝试创建一个std::vector,其中包含一个包含 size 值的元素。那不是你感兴趣的。

从分散在不同答案的评论中的零碎数据来看,我发现 OP 不使用 C++11,也不需要动态数组功能。正因为如此,我的建议是使用好的 C-style 静态数组。以下代码可以解决问题:

struct Test {
    static const size_t array_sz = 10;
    int my_array[array_sz];
};

如果,由于本质上是愚蠢的CS老师的作业,则强制要求std::vector,则应如何初始化:

struct Test {
    static const size_t array_sz = 10;
    std::vector<int> my_array;
    Test() : my_array(array_sz) {}
};

说明:std::vector需要使用某个参数来构造以指定其大小。在 C++11 之前,调用成员变量的特定构造函数的唯一方法是在封闭类的构造函数的所谓初始值设定项列表中执行此操作。

在 C++11 之后,这也可以直接在成员定义的站点中完成。但是你需要一个不到 6 年的编译器。

只需声明std::vector<int> array,如果您希望矢量不大于一个特定大小,请创建一个在插入前检查矢量大小的方法。

数据成员通常在成员初始化列表中初始化:

class Test
{
    std::vector<int> array;
public:
    Test() : array(10)
    {     // ^^^^^^^^^
    }
};

像这样:(需要 c++11 或更高版本)

class Test {
private:
    size_t size = 10;
    std::vector<int> array = std::vector<int>(size);
};

摆脱(size) .向量没有或必须有长度,直到至少存在一个实例。向量中的元素数不属于其类型。一个std::vector<int>不能包含整数或一百个整数——它仍然是一个std::vector<int>。当声明向量是类的成员时,该向量的实例在以后存在时将具有的成员数无关紧要。