在c++中创建结构体数组

creating an array of structs in c++

本文关键字:结构体 数组 创建 c++      更新时间:2023-10-16

我正在尝试创建一个结构体数组。下面的代码有效吗?我一直得到一个expected primary-expression before '{'令牌错误。

int main() {
  int pause;
  struct Customer {
    int uid;
    string name;
  };
  Customer customerRecords[2];
  customerRecords[0] = {25, "Bob Jones"};
  customerRecords[1] = {26, "Jim Smith"};
  cin >> pause;
  return 0;
}

试试这个:

Customer customerRecords[2] = {{25, "Bob Jones"},
                               {26, "Jim Smith"}};

struct被初始化后,不能使用初始化列表。在声明数组customerRecords时,已经默认初始化了两个Customer结构体。因此,你要么使用成员访问语法来设置非静态数据成员的值,在声明数组本身时使用初始化列表列表初始化结构,要么为你的结构创建一个构造函数并使用默认的operator=成员函数初始化数组成员。

所以下列任意一个都可以:

Customer customerRecords[2];
customerRecords[0].uid = 25;
customerRecords[0].name = "Bob Jones";
customerRecords[1].uid = 25;
customerRecords[1].namem = "Jim Smith";

或者如果你为你的结构定义了一个构造函数,如:

Customer::Customer(int id, string input_name): uid(id), name(input_name) {}

你可以这样做:

Customer customerRecords[2];
customerRecords[0] = Customer(25, "Bob Jones");
customerRecords[1] = Customer(26, "Jim Smith");

或者你可以使用Tuomas在他的回答中使用的初始化列表序列。他的初始化列表语法之所以有效,是因为您实际上是在声明数组时初始化Customer结构,而不是允许在声明聚合数据结构(如数组)时对结构进行默认初始化。

一些编译器支持复合文字作为扩展,允许这样的结构:

Customer customerRecords[2];
customerRecords[0] = (Customer){25, "Bob Jones"};
customerRecords[1] = (Customer){26, "Jim Smith"};

但是不方便携带

效果很好。我有gcc编译器c++ 11准备好了。试试这个,你会看到:

#include <iostream>
using namespace std;
int main()
{
    int pause;
    struct Customer
    {
           int uid;
           string name;
    };
    Customer customerRecords[2];
    customerRecords[0] = {25, "Bob Jones"};
    customerRecords[1] = {26, "Jim Smith"};
    cout << customerRecords[0].uid << " " << customerRecords[0].name << endl;
    cout << customerRecords[1].uid << " " << customerRecords[1].name << endl;
    cin >> pause;
return 0;
}

可以使用vector。首先定义Struct

  struct Customer {
    int uid;
    string name;
  };

,

vector<Customer> array_of_customers;

通过使用vector,您将在结构数组中拥有更大的自由度和访问权限。

现在如果想在定义数组中添加一个struct元素。你可以使用

array_of_customer.push_pack(/* struct element here */)

的例子:

Customer customer1;
customer1.uid = 01;
customer1.name = "John Doe";
Customer customer2;
customer2.uid = 02;
customer2.name = "Blah Blah";

array_of_customers.push_back(customer1);
array_of_customers.push_back(customer2);

你现在有一个struct数组