Новый вопрос! Я начал небольшой проект, который загружает целочисленные значения из файла в массив. (Массив необходимо получить случайно, поэтому я выбрал массив, а не вектор.)C++ создание массива во временном классе
Чтобы загрузить значения данных из файла, я создал класс Load/Save. Функция загрузки считывает первую строку файла, которая дает нам общее количество записей, которые должен иметь массив, а затем заполняет массив остальными значениями в этом файле.
Этот загрузочный объект создается только временно, я хочу предоставить данные программе и затем удалить объект.
Каков наилучший способ достичь этого? должен ли я создать массив в main() и передать объект нагрузки ссылку, и в этом случае, как я могу создать массив, чтобы он мог быть изменен для объема данных, требующих загрузки.?
здесь нагрузка/сохранить класс:
class FileIOClass {
public:
FileIOClass();
int ReadFile(char*);
private:
};
это код каст для класса:
FileIOClass::FileIOClass() {
}
int FileIOClass::ReadFile(char* file_name) {
string line;
ifstream file;
file.open(file_name, ios::in);
cout << "Loading data...\n";
int num_x, num_y, array_size;
bool machine_header = false;
if (file.is_open()) {
while(getline(file, line)) {
if (line.size() && machine_header == false) {
// Load machine header information
file >> num_x;
file >> num_y;
file >> array_size;
machine_header = true; // machine header has now been read, set this to true.
}
else {
// this is where i want to load the data from the file into an array.
// the size of the array should be equal to the value in array_size.
}
}
cout << "Loading complete!\n";
}
else {cout<<"File did not open!\n";}
file.close();
return 0;
}
и вот main.cpp до сих пор:
int main(int argc, char** argv)
{
FileIOClass data_in;
data_in.ReadFile(argv[1]);
return 0;
}
будет несколько других классов, которые будут обрабатывать данные, содержащиеся в массиве.
Бьюсь об заклад, в этом коде есть нагрузка нечетных новинок ошибок - пожалуйста, не стесняйтесь указывать их, лучше изучить эти вещи сейчас.
Спасибо всем!
Ian.
Я еще не прочитал вопрос, но это: «(Массив должен быть доступным наугад, поэтому я выбрал массив, а не вектор.)« ОСТАНОВИТЕ ЗДЕСЬ. «Std :: vector» - это просто динамически растущий массив. Если вам нужен массив размера времени выполнения, используйте 'std :: vector' и сделайте с ним. – Angew
Случайный доступ означает, что вы не используете 'list'. Это означает, что вы должны использовать 'vector'. Редко приходится использовать массивы, и они особенно плохи для начинающих. – RichardPlunkett
Чтобы добавить к тому, что @Angew сказал: если вы знаете в какой-то ранний момент, сколько элементов вам нужно, вызовите 'std :: vector :: reserve()'. Это резервирует достаточную память, так что дальнейшие вставки в массив до заданного размера не требуют переноса данных, которые в противном случае выполняли бы 'std :: vector'. – Oswald