如何在类中声明预终止长度的向量
How do I declare a vector of pretermined length in a class?
这让我绕弯。所有关于向量的文档都非常深入。
在一个类中,我想声明一个长度等于我已经声明的字符串长度的向量。这听起来很简单。
如果我使用:
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>
。当声明向量是类的成员时,该向量的实例在以后存在时将具有的成员数无关紧要。
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 在使用标准向量函数时引发'std::bad_alloc'实例后调用的终止
- 如何在C++中使用 if 语句终止向量输入
- (C++) 学习向量 - 编码/输入流终止/比较向量的问题
- C :终止循环的最优雅方法,该循环在字符串向量上迭代
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- 程序终止:使用向量集的向量
- 如何在类中声明预终止长度的向量
- 循环终止条件错误的 cpp 向量
- std::向量使用const_iterator终止程序
- C++ 在抛出字符串向量"std::out_of_range"的实例后调用的终止