C++初始化类的成员数组的所有值
C++ initialize all values of a member array for a class
在C++中,如何初始化类的成员数组的所有值?
#define MAX_MATRIX 20
Class Matrix {
public:
Matrix(); //constructor
protected:
int n[MAX_MATRIX]; // note cannot do = { 0} or w/e here
};
Matrix::Matrix()
{
// how to set all n to -1?
}
您可以使用std::fill
:
std::fill(begin(n), end(n), -1);
(这些begin
和end
函数可以在C++11中的命名空间std
中找到,或者您可以在C++03中轻松地自己实现它们)
这是C++03的一个明显缺点。在C++11中,这已经被修复,现在您可以初始化所有东西,包括数组:
class Matrix
{
public:
Matrix() : n { } { }
protected:
static const unsigned int MAX_MATRIX = 20;
int n[MAX_MATRIX];
};
(C++中也不需要讨厌的预处理器宏。)
在C++03中,您不能简单地初始化数组成员,但可以将其设置为构造函数主体中有意义的东西,例如通过std::fill(n, n + MAX_MATRIX, 0);
。
(当然,说std::array<int, MAX_MATRIX> n;
要好得多。)
有一种类型:
class Matrix {
public:
Matrix() : n() { n.fill(-1); }
protected:
std::array<int, 20> n;
};
for (unsigned i = 0; i < MAX_MATRIX; ++i) n[i] = -1;
#include <cstring>
Matrix::Matrix()
{
static bool init=false;
static int n_init[MAX_MATRIX];
if (!init){
for(int i=0; i<MAX_MATRIX; i++){
n_init[i] = -1;
}
init = true;
}
memcpy(n,n_init,MAX_MATRIX*sizeof(int));
}
数组n_init
只初始化一次并存储在内存中,然后所有后续构造都是没有循环的快速内存复制。如果像在索引中循环时那样增加MAX_MATRIX
的大小,尤其是在多次调用Matrix::Matrix()
的情况下,应该不会看到速度下降太多。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- C++内联数组成员统一初始化
- 有没有办法把字符串数组成员放在".structurevariable"前面?
- 将初始化列表传递给 C++ 中的数组成员
- 具有灵活数组成员的结构的大小
- 初始化固定的 C 数组成员结构
- 带有布尔数组成员的 C++ 结构.如何在主代码中使用
- 我如何通过构造函数大小私人std ::数组成员
- 通过两个下标访问数组成员
- size_t结构非数组成员崩溃的强制转换
- 删除数组成员的更好方法是什么?
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 在C 中的数组初始化期间使用数组成员
- 友元函数将内存分配给数组成员是否有任何限制?
- 从结构传递数组成员会导致访问读取冲突
- 为什么 const char 数组成员的初始化在构造函数初始值设定项中不兼容
- 如何在 lambda 中访问数组成员
- 将整数值分配为variadic模板列表到静态const std ::数组成员