C/C++用一个值填充struct数组

Gre*_*zak 1 c c++ memory struct memcpy

我想用相同的值填充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));
}
Run Code Online (Sandbox Code Playgroud)

Lih*_*ihO 7

小心地正确键入类型的名称(区分大小写)并且在定义之后不要忘记分号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;
}
Run Code Online (Sandbox Code Playgroud)

输出321.


"怎样才能以最快最简单的方式完成?"

最简单的方法可能是使用std::vector和相应的构造函数:

#include <vector>

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

    std::vector<MyStruct> vec(100, abc);
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • @POW:我敢打赌:[std::vector 比普通数组慢得多?](http://stackoverflow.com/a/3664349/14065)。ps向量并不慢。就我个人而言,我什至不会声明额外的变量 `abc`。添加一个构造函数,以便您可以像这样使用:`std::vector&lt;MyStruct&gt; vec(100, MyStruct(123,321));` 或使用 C++11 初始化列表 `std::vector&lt;MyStruct&gt; vec(100, {123,321});` (2认同)