我正在使用一个包含字符数组的类。
class board
{
char spot[64];
public:
board();
~board(void);
};
我想在程序开始时将数组中的每个值设置为相同的字符,如何在构造函数中初始化值?是否有一种简单的方法来访问并允许通过索引对它们进行更改?
谢谢,
答案 0 :(得分:4)
你不能在C ++ 03中这样做。但是,可以在C ++ 11中的构造函数初始化列表中初始化数组:
board::board()
: spot { 1, 2, 1, 2, /* ... */ }
{ }
您可以键入值,也可以使用魔术可变参数模板提供“N个重复值”(只要类型为整数)。此外,任何缺失的元素都是零初始化的(例如char spot[4] { 1, 2 };
)。
对于访问,您可以在课程中使用spot[i]
,如果需要,您可以编写合适的访问者功能(尽管您应该总是担心您的课程只是“转发”某个成员 - 实际上您想要的是用于封装某些高阶函数的类。)
如果您希望看到模板代码“初始化具有固定值的N
数组”,或许您应该将其作为单独的问题发布。
更新:这是一个天真的模板技巧,它将所有数组元素初始化为值2
。
#include <iostream>
#include <utility>
#include <prettyprint.hpp>
class Foo
{
int arr[10];
template <typename T, T> struct Filler { };
template <typename T, bool, unsigned int, T...> struct FillHelper { };
template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, true, I, V, Vals...>)
: arr { V, Vals... } { }
template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, false, I, V, Vals...>)
: Foo(FillHelper<T, I == 1, I - 1, V, V, Vals...>()) { }
template <typename T, unsigned int N, T V>
Foo(Filler<T, V>, T const (&)[N])
: Foo(FillHelper<T, N == 1, N - 1, V>())
{ }
public:
Foo() : Foo(Filler<int, 2>(), arr)
{
std::cout << "Foo: " << arr << "\n";
}
};
int main()
{
Foo x;
}
输出:Foo: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
答案 1 :(得分:0)
要将数组中的所有值设置为默认值x,您可以使用类似std :: fill_n的颜色
例如,将所有元素设置为-1
std :: fill_n(array,100,-1);
答案 2 :(得分:0)
将数组中的每个值设置为相同字符
为什么不使用memset?例如,将每个值初始化为0x01
board::board()
{
memset(spot, 0x01, sizeof(spot));
}
答案 3 :(得分:0)
您只能使用for循环分配每个元素。