嗯,我想要一个像
memset
但对于 struct
的函数,这样它就可以在某些或所有元素上使用,如下所示:
// create array of person data elements
struct {
unsigned char name[25];
unsigned char age;
unsigned int numberPhone;
} persons [256];
// the 256 people have the same name
memset(person, { "Mohammed", 0, 0 } ,sizeof(persons[0]));
我可以使用
for loop
,但我更喜欢使用 memset
,因为在这种情况下它比 for loop
性能更高。
如果所有 256 个对象都应使用相同的值进行初始化,只需默认它们即可:
struct {
unsigned char name[25] = "Mohammed";
unsigned char age = 0;
unsigned int numberPhone = 0;
} persons [256];
不需要更多。
std::fill
数组:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <type_traits>
int main() {
struct {
unsigned char name[25];
unsigned char age;
unsigned int numberPhone;
} persons[256];
// an instance with the proper values:
std::remove_reference_t<decltype(persons[0])> temp{
.name = "Mohammed", .age = 0, .numberPhone = 0};
// fill the array
std::fill(std::begin(persons), std::end(persons), temp);
}
注意:
std::remove_reference_t<decltype(persons[0])>
是获取匿名类的 type 的一种麻烦方法。更愿意为您创建的类型命名。