1

我正在使用一个具有字符数组的类。

class board
{
   char spot[64];

public:
   board();
   ~board(void);


};

我想在程序开始时将数组中的每个值设置为相同的字符如何在构造函数中初始化这些值?是否有一种简单的方法可以通过索引访问并允许对其进行更改?

谢谢,

4

4 回答 4

4

你不能在 C++03 中做到这一点。但是,可以在 C++11 的构造函数初始化器列表中初始化数组:

board::board()
: spot { 1, 2, 1, 2, /* ... */ }
{  }

您可以输入值,或者想出一个神奇的可变参数模板来提供“N 个重复值”(只要类型是整数)。此外,任何缺失的元素都被初始化为零(例如char spot[4] { 1, 2 };)。

对于访问,您可以spot[i]在类内部使用,并且如果需要,您可以编写合适的访问器函数(尽管您应该始终担心您的类是否只是“转发”一个成员——实际上您希望您的类封装一些更高阶的功能)。

如果您想查看模板代码以“初始化N具有固定值的数组”,也许您应该将其作为一个单独的问题发布。


更新:这是一个简单的模板技巧,它将所有数组元素初始化为 value 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]

于 2012-12-08T12:01:25.270 回答
0

您只能使用 for 循环分配每个元素。

于 2012-12-08T12:38:54.323 回答
0

要将数组中的所有值设置为默认值 x,您可以使用 std::fill_n 之类的东西

,例如将所有元素设置为 -1
std::fill_n(array, 100, -1);

于 2012-12-08T12:09:33.930 回答
0

将数组中的每个值设置为相同的字符

为什么不使用 memset ?例如将每个值初始化为 0x01

board::board()
{
    memset(spot, 0x01, sizeof(spot));
}
于 2012-12-08T12:09:47.173 回答