c++ - C++中结构数组的初始化

标签 c++ c++11 struct initialization c-strings

如果我有如下结构:

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/

相关文章:

c++ - Windows,C++ : two connections on one server socket?

c++ - 使用OpenCv的矩阵运算(加法和减法)OpenCV C++

c++ - 结构中的省略号

json - 使用更改的 JSON 属性解码

c# - 与结构的接口(interface),通过使用泛型进行引用

c++ - 不打开窗口的 OpenGL 上下文 - 当使用由 GetDesktopWindow 制作的 HWND 时,wglMakeCurrent 因 HDC 和 HGLRC 而失败

c++ - 更改比较函数以根据配对 vector 的第二个条目对绘图进行排序

c++ - 如何组织带有符号分析的无限循环?

C++11 用于 std::list 的基于范围的 for 循环

c++ - 如何不关心类成员模板