初始化 C++ 中的结构数组
Initialization of an array of structs in C++
如果我有一个像下面这样的结构:
typedef struct MyStruct {
char **str;
int num;
} MyStruct;
有没有办法让我初始化这个结构的数组。也许像下面这样:
const MyStruct MY_STRUCTS[] = {
{
{"Hello"},
1
},
{
{"my other string"},
3
},
};
最终,我希望在C++类中不断声明结构数组。如何做到这一点?是否可以有一个预先初始化的私有声明成员?
当然,你会这样写:
#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>
。
你的意思是这样的:
在某些头文件中:
class X
{
private:
static const MyStruct MY_STRUCTS[];
};
在某个.cpp文件中:
const X::MyStruct MY_STRUCTS[] = { { {"Hello"}, 1}, { "Other String"} , 3 } };
然而,这假设你有一个char *str;
,因为char **str;
需要一个辅助变量来取下地址。或者,您可以使用 std::vector<string>
,这将解决问题。
你可以使用类似的东西
class foo {
MyStruct array[2];
public:
foo()
: array{ { "a", 1 }, { "b", 2 }}
{
}
};
假设您struct
的第一个成员实际上是char const*
的,而不是像初始化示例建议的那样char**
。
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组