c++ - 在头文件中初始化可自定义结构的 vector

标签 c++ arrays struct

有没有什么方法可以从同一个头文件中获得一个全局结构列表并初始化一个包含它们的修改版本的 vector ? 我知道我不能直接访问和编辑 .h 文件中的变量,因为它不是运行时代码,但也许碰巧有一个解决方法——或者我刚好跳过的一些非常基本的方法C++ 初学者手册。请原谅我!

举个例子,假设我有一个包含几个成员的结构,并在 .h 文件中声明了一些全局成员。

struct MyStruct
{
  unsigned int a;
  string foo;
  float myfloat;
};

MyStruct struct_one={1,"hello",0.238f};
MyStruct struct_two={10,"salve",3.14f};
MyStruct struct_three={3,"bonjour",0.001f};
MyStruct struct_four={6,"dias",5.0f};

然后我可以用这种方式初始化一个包含它们的 vector (虽然不知道它是否是最好的)

MyStruct MyStructArray[] = {struct_one, struct_two, struct_three, struct_four};

vector<MyStruct> MyStructVector(MyStructArray,
MyStructArray+sizeof(MyStructArray)/sizeof(MyStructArray[0]));

但我希望能够在创建 vector (或数组)之前即时更改某些结构的成员,而不更改全局成员。 可能吗?

编辑:“在头文件中”是指“在头文件中”。如果我在 header 中执行 unsigned int a = 100;,我不必在实际源代码中初始化或调用某些东西来使其工作。 vector 本身工作完美,我只想知道是否有一种方法可以从原始全局结构的修改版本构建它。说,我想使用相同的全局结构,但成员 具有不同的值一个

最佳答案

在@Sam 的回答之上...

使用构造函数:

struct MyStruct {
    unsigned int a;
    string foo;
    float myfloat;

    MyStruct(unsigned int a, const string& foo, float myfloat) : a(a) , foo(foo), myfloat(myfloat) {}
};

现在您可以使用一个简单的语句将您的结构添加到 vector 中

vec.push_back(MyStruct(1, "hello", 0.238f));

class Foo {
public:
    static std::vector<int> MyStructVector;
}

inline std::vector<MyStruct> MakeVector()
{
    std::vector vec;
    vec.push_back(MyStruct(1, "hello", 0.238f));
    //...
    return vec;
}

std::vector<MyStruct> Foo::MyStructVector= MakeVector();

关于c++ - 在头文件中初始化可自定义结构的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291399/

相关文章:

c++ - 使用大括号进行结构初始化

C++ 结构数据成员

c++ - 代码块中没有 openssl_applink

arrays - 如何按属性类型自动排序 Swift 中的数组?

javascript - GraphQL 查询返回错误 .filter 不是函数

c - 如何扫描除第一行以外的行中的值

swift - 如何在结构中将 var 的返回类型定义为空数组?

c++ - 使用构造函数继承来提供兄弟类型之间的转换

C动态分配结构数组及其组件

java - 插入部分满数组