C/C 用一个值填充结构数组

新手上路,请多包涵

我想用相同的值填充 MyStruct 数组。如何以最快和最简单的方式完成?我正在使用相当低级的方法,例如 memsetmemcpy

编辑: std::fill_n 确实符合要求并且工作正常。但它是 C++ 方式。 如何在纯 C 中完成?

 struct MyStruct
{
    int a;
    int b;
};

void foo()
{
    MyStruct abc;
    abc.a = 123;
    abc.b = 321;

    MyStruct arr[100];
    // fill 100 MyStruct's with copy of abc
    std::fill_n(arr, 100, abc); // working C++ way

    // or maybe loop of memcpy? But is it efficient?
    for (int i = 0; i < 100; i++)
        memcpy(arr[i],abc,sizeof(MyStruct));
}

原文由 Greg Witczak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 751
1 个回答

请注意正确键入类型名称(区分大小写),并且不要忘记 struct 定义后的分号,除此之外,您的程序应该可以毫无问题地编译:

 #include <iostream>
#include <algorithm>

struct MyStruct
{
    int a;
    int b;
}; // <------------- HERE

int main() {
    MyStruct abc;
    abc.a = 123;
    abc.b = 321;

    MyStruct arr[100];
    std::fill_n(arr, 100, abc);

    std::cout << arr[99].b;
}

输出 321


“如何以最快最简单的方式完成?”

最简单的方法可能是使用 std::vector 及其适当的构造函数:

 #include <vector>

void foo()
{
    MyStruct abc;
    abc.a = 123;
    abc.b = 321;

    std::vector<MyStruct> vec(100, abc);
    ...
}

原文由 LihO 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题