2015-02-09 4 views
-4

Я довольно новичок в программировании и, в основном, сам преподаю, и я мало знаю о жаргоне, поэтому я не уверен в том, как искать это, и поэтому не нашел ответа через просто поиск , На вопросC++ structs incrementing

Есть ли способ увеличить структуру? Как и я, для циклов, использующих int. Я создаю простую программу, в которой я бы ввел несколько учеников и хотел бы создать несколько экземпляров структур, которые увеличиваются. Пример

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

sorta подобный это. Извините, если я немного запутался. Надеюсь, кто-то может мне помочь.

+0

Я не уверен, что понимаю, что вы пытаетесь сделать ... –

+1

вы спрашиваете, можете ли вы иметь массив структур? Если это так, вы можете это сделать. –

+0

Думаю, он просит создать несколько экземпляров студента с уникальным идентификатором. – rottenoats

ответ

-1
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"); 
} 
-1

Я не совсем уверен, что вы пытаетесь. В случае, если вы хотите иметь массив статического размера и хотите увеличить через это элемент, используйте:

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)); 

Итерация над ним работает так же, как с массивами.

+0

Да, спасибо, это все. Работал идеально для статического размера, но я не совсем уверен, как использовать динамический, но я должен буду читать. Я действительно не знал, как это объяснить, но я рад, что вы это поняли. – BluesmokE

0

Что вы хотите сделать, это сделать коллекцию 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 объект в vector.push_back() функция vector класса могут быть использованы для этого, например:

students.push_back(foo); 

где foo является student переменная, которую создали ранее.


Доступ к объектам в vector

Теперь, когда вы добавили student к vector, вы можете получить доступ к нему с помощью функции at:

students.at(0); 

выше линия доступа первый объект в vector. at функция также очень полезно, если вы случайно попытаться получить доступ к объекту, которого нет в vector, к примеру, вы пытаетесь получить доступ ко второму объекту, который мы еще не добавил:

students.at(1); 

Потому что мы только имеют один student, хранящийся в vector, пока что попытка доступа к второму student с at приведет к ошибке . Это здорово! Теперь мы знаем, что мы сделали что-то неправильно, и сообщение об ошибке, вероятно, даже скажет нам, что мы сделали неправильно.


О vector против необработанного массива

Сырые массив как int numbers[10] не скажет нам, если мы случайно попытаться получить доступ через конец массива, как int x = numbers[10]. Не будет никаких полезных сообщений об ошибках, чтобы сказать нам, что что-то не так, программа, вероятно, просто молча продолжит выполнение и начнет вести себя странно. Это то, что мы, как программисты, не хотим. Таким образом, vector является превосходной альтернативой.

Обратите внимание, что с vector вам также не нужно указывать размер, как в случае с необработанными массивами. vector s будет автоматически расти при добавлении к нему новых объектов, поэтому вам не придется беспокоиться о добавлении слишком большого количества.

+0

Вы должны сначала поставить путь лучше. – Puppy

+0

Но если он использует struct, возможно, он находится на C, а не C++ –

+0

@Puppy, я мог бы, но я предпочитаю сначала ответить на фактический вопрос, а затем предложить улучшения. – emlai

-1

Вы можете использовать массив struct и пересечь их, или использовать указатели для struct и увеличивать указатель для перемещения.

#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; 
}