如果我有如下结构:
typedef struct MyStruct {
char **str;
int num;
} MyStruct;
有没有办法让我初始化这个结构的数组。也许像下面这样:
const MyStruct MY_STRUCTS[] = {
{
{"Hello"},
1
},
{
{"my other string"},
3
},
};
最终,我希望在 C++ 类中有一个不断声明的结构数组。如何才能做到这一点?是否可以有一个预初始化的私有(private)声明成员?
最佳答案
当然,你会这样写:
#include <string>
#include <vector>
struct MYStruct
{
std::vector<std::string> str;
int num;
};
MyStruct const data[] = { { { "Hello", "World" }, 1 }
, { { "my other string" }, 3 }
};
除非我误会了你实际上只是想要num
来计算元素的数量。那么你应该有:
std::vector<std::string> data[] = { { "Hello" }
, { "my", "other", "string" }
};
您可以使用 data[0].size()
恢复元素大小, data[1].size()
等
如果一切都是静态确定的,而你只是想要一个紧凑的引用,你仍然需要提供存储,但一切实际上都与 C 中的相同:
namespace // internal linkage
{
char const * a0[] = { "Hello" };
char const * a1[] = { "my", "other", "string" };
// ...
}
struct Foo
{
char const ** data;
std::size_t len;
};
Foo foo[] = { { a0, 1 }, { a1, 3 } };
因为大小是std::distance(std::begin(a0), std::end(a0))
,您可以使用只需要 a0
的宏来简化最后一部分作为论据。而不是手写Foo
, 你可能只使用 std::pair<char const **, std::size_t>
.
关于c++ - C++中结构数组的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938679/