【问题标题】:C++ structs incrementingC++ 结构递增
【发布时间】:2015-02-09 10:51:30
【问题描述】:

我对编程很陌生,而且大部分时间都是自学的,而且我对术语了解不多,所以我不确定如何搜索这个,因此没有通过搜索找到答案。进入问题

有没有增加一个结构?就像我在 for 循环中使用 int 一样。我正在创建一个简单的程序,我将在其中输入多个学生并希望创建多个递增的结构实例。示例

struct student{
    string name;
    int id;
}x[i];
i++;

有点像。对不起,如果我有点困惑。希望有人能帮帮我。

【问题讨论】:

  • 我不确定你要做什么......
  • 你是在问你是否可以拥有一个结构数组?如果是这样,当然可以。
  • 我认为他要求创建多个具有唯一 ID 的学生实例。
  • 是的,很抱歉,如果我不能更简单地解释一下。但我想使用一个结构有点像 int num[10] 这样的数组,我可以通过增加 i 来输入 10 个数字。
  • “但我想使用一个有点像数组的结构”——不,你真正想要的是一个结构类型的 数组

标签: c++ struct increment


【解决方案1】:

您想要做的是收集student 对象。

在 C++ 中,std::vector 类通常是集合类型的最佳选择,在您的情况下也是如此。


如何使用vector

要使用std::vector,您必须首先使用#include <vector> 头文件。然后,您可以使用以下语法声明 std::vector 对象:

std::vector<T> name;

其中T 是您要存储在vector 中的元素类型,name 是集合的名称。在您的情况下,您希望类型为 student,包含学生的集合的好名称是 students,例如:

std::vector<student> students;

将对象添加到vector

现在您可以开始将student 对象添加到vectorvector 类的 push_back() 函数可以用于此,如下所示:

students.push_back(foo);

其中foo 是您之前创建的student 变量。


访问vector中的对象

现在您已将student 添加到vector,您可以使用at 函数访问它:

students.at(0);

以上行将访问vector 中的第一个对象。如果您不小心尝试访问不在vector 中的对象,at 函数也非常有用,例如,您尝试访问我们尚未添加的第二个对象:

students.at(1);

因为到目前为止我们只有一个student 存储在vector 中,所以尝试使用at 访问第二个student 将导致错误。太棒了!现在我们知道我们做错了什么,错误消息甚至可能会告诉我们我们做错了什么。


关于 vector 与原始数组

int numbers[10] 这样的原始数组不会告诉我们我们是否不小心尝试访问像int x = numbers[10] 这样的数组末尾。不会有有用的错误消息告诉我们做错了什么,程序可能只是默默地继续执行并开始表现出奇怪的行为。这是我们作为程序员不想要的。因此,vector 是更好的选择。

请注意,使用 vector 您也不必像原始数组那样指定大小。 vectors 会随着你添加新对象而自动增长,所以你不必担心添加太多。

【讨论】:

  • 你应该把更好的方法放在第一位。
  • 但是如果他使用struct,也许他是在C,而不是C++
  • @Puppy 我可以,但我更愿意先回答实际问题,然后提出改进建议。
  • @EmrysMyrooin 它被标记为 C++。
  • 另外std::vector 甚至还有一个operator[] 来访问特定索引处的元素(以说明语法的相似性)。
【解决方案2】:
struct student{
    student(){}
    student(int i;string n):id(i),name(n){//this is student constructor}
    string name;
    int id;
};
int numberOfStudents=10;
student arrayOfStudents[10];
for (int i=0;i<numberOfStudents;i++){
     arrayOfStudents[i]=student(i,"studentname");
}

【讨论】:

    【解决方案3】:

    您可以使用结构数组并遍历它们,或者使用指向结构的指针并递增指针以进行遍历。

    #include <iostream>
    
    using namespace std;
    struct student{
        string name;
        int id;
    };
    int main()
    {
        int noOfStudent;
        cout << "Enter number of student: ";
        cin >> noOfStudent;
    
        student *x = new student[noOfStudent];
    
        for ( int i = 0; i < noOfStudent; ++i)
        {
            cout << "Enter Student Name: ";
            cin >> x[i].name;
            cout << "Enter Student ID: ";
            cin >> x[i].id;
        }
    
        delete[] x;
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      我不确定你在尝试什么。如果您想要一个 静态大小 数组并希望在其元素上递增,请使用:

      const unsigned int SIZE = 10;
      struct student{
          string name;
          int id;
      }x[SIZE];
      

      并对其进行迭代:

      for (unsigned int i = 0; i < SIZE; i++) {
          somefunction(student[i]);
      }
      

      如果您想拥有动态数量的元素,例如可以使用std::vector

      std::vector < student > x;
      x.push_back(student("John Doe", x.size() - 1));
      

      迭代它的工作方式与数组相同。

      【讨论】:

      • 是的,谢谢,就是这样。非常适合静态尺寸,但我不太确定如何使用动态尺寸,我必须阅读。我真的不知道如何解释,但我很高兴你能理解。
      猜你喜欢
      • 2021-03-04
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多