C ++ класс с массивом структур, не зная, насколько большой массив мне нужен - PullRequest
3 голосов
/ 19 марта 2010

У меня есть класс с полями , например имя, возраст, школа и т. Д. Мне нужно иметь возможность хранить другую информацию, например, где они путешествовали и в каком году это было. Я не могуобъявите другой класс специально для хранения travelDestination и какого года, поэтому я думаю, что структура может быть лучшей.Это всего лишь пример:

struct travel {
    string travelDest;
    string year;
};

Проблема в том, что люди, вероятно, путешествовали в разных количествах.Я думал о том, чтобы просто иметь массив структур перемещения для хранения данных.Но как мне создать массив фиксированного размера для их хранения, не зная, насколько большим он мне нужен?

Возможно, я иду по этому пути совершенно неправильно, поэтому любые предложения относительно лучшего способа будутпризнателен.


Я понимаю, что по существу нет разницы между классом и структурой, но для целей критериев присваивания мне не разрешен "класс", так что да.

Ответы [ 5 ]

9 голосов
/ 19 марта 2010

Можно попробовать связать std :: vector с каждым человеком, с каждой записью в векторе, содержащей структуру:

typedef struct travel {
    string travelDest;
    string year;
} travelRecord;

std::vector<travelRecord> travelInfo;

Затем вы можете добавлять элементы в вектор так, как считаете нужным:

travelRecord newRecord1 = {"Jamaica", "2010"};
travelInfo.push_back(newRecord1);

travelRecord newRecord2 = {"New York", "2011"};
travelInfo.push_back(newRecord2);

Более подробную информацию о векторных операциях можно найти здесь .

1 голос
/ 19 марта 2010

Я бы согласился с остальными, используйте список типа stl.Список (или любой другой контейнер) будет расти по мере того, как вы помещаете в него данные, например:


#include <list>
#include <string>
using namespace std;

struct travel {
    string travelDest;
    string year;
};

int main() {
    list<travel> travels;
    travel t = {"Oslo", "2010"};
    travels.push_back(t);
}

Также обратите внимание, что хотя вы говорите, что не можете создать класс, вы совершенно готовы создать структуру,В C ++ для всех практических целей это одно и то же, за исключением того, что переменные структуры по умолчанию являются открытыми, а переменные класса по умолчанию являются закрытыми.

1 голос
/ 19 марта 2010

Возможно, вы захотите использовать один из классов контейнеров STL для хранения вашей структуры (или, что еще лучше, преобразовать вашу структуру в класс, чтобы скрыть элементы данных и сделать методы доступа get / set)

станд :: вектор

станд :: список

...

Выбор того, что вы выберете, полностью зависит от того, какие операции вы ожидаете от них. Вектор хорош для базового хранилища и произвольного доступа. Если вы хотите выполнить какие-либо функции сортировки или поиска, вам, вероятно, нужен список или, возможно, даже карта или мультикарта.

Вот хорошая отправная точка для получения дополнительной информации о STL: http://www.parashift.com/c++-faq-lite/class-libraries.html

1 голос
/ 19 марта 2010

Попробуйте узнать о стандартной библиотеке шаблонов C ++ (STL). Например, вы можете использовать список .

0 голосов
/ 19 марта 2010

Чтобы создать массив из 100 элементов, вы можете сделать это:

travel* pTravelArray = new travel[100];

Вы можете сделать эту переменную

int numberOfElements = 100;
travel* pTravelArray = new travel[numberOfElements];

Только не забудьте избавиться от этого, когда закончите:

delete [] pTravelArray;

Как и предполагали другие, библиотека STL содержит в себе гораздо более приятные (менее легкие для выполнения глупости с распределением памяти) коллекции, которые вы можете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...