2010-04-24 2 views
1

Я хочу сделать программу на C++, которая читает файл, в котором каждое поле будет иметь номер перед ним, который указывает, сколько времени это происходит.Как использовать индикатор длины в программе на C++

Проблема в том, что я читаю каждую запись в объекте класса; как создать атрибуты класса dynamic?

Например, если поле является «john», оно будет считываться в массиве из 4 символов.

Я не хочу создавать массив из 1000 элементов, так как минимальное использование памяти очень важно.

ответ

1

Для этого вам необходимо использовать динамическое распределение (прямо или косвенно).

Если напрямую, вам нужно new[] и delete[]:

char *buffer = new char[length + 1]; // +1 if you want a terminating NUL byte 

// and later 
delete[] buffer; 

Если вам разрешено использовать импульс, можно упростить, что немного с помощью boost::shared_array<>. С shared_array, вам не нужно вручную удалять память, как обертка массив будет заботиться о том, что для вас:

boost::shared_array<char> buffer(new char[length + 1]); 

Наконец, вы можете сделать динамическое выделение косвенно через классы, как std::string или std::vector<char>.

3

Используйте std::string, который изменит размер, чтобы быть достаточно большим для хранения содержимого, которое вы ему назначили.

2

Если вы просто хотите читать слово в слово из файла, вы можете сделать:

vector<string> words; 
ifstream fin("words.txt"); 
string s; 
while(fin >> s) { 
    words.push_back(s); 
} 

Это поместит все слова в файле в вектор words, хотя вы потеряете пропуски.

1

Я полагаю, что между записями нет пробелов, или вы просто напишете file >> record в цикле.

size_t cnt; 
while (in >> cnt) { // parse number, needs not be followed by whitespace 
    string data(cnt, 0); // perform just one malloc 
    in.get(data[0], cnt); // typically perform just one memcpy 
    // do something with data 
} 
Смежные вопросы