Делаю программу считывания с файла слов. Заранее не знаю сколько слов будет в файле, по этому нужен динамический массив, который будет увеличивать свою вместимость по мере считывания. В С есть функция realloc, которая позволяет это делать без проблем. Как такое реализовать в С++? И можно ли смешивать оператор new вместе с realloc? Насколько это будет правильно работать?
В Си и Си++ существенно различаются подходы к управлению памятью. В частности, вам не нужно вручную беспокоиться и последовательно выделять память для растущего массива. Это уже умеет библиотечный шаблонный класс std::vector
— этакий динамический массив.
Ваша задача чтения слов из файла решается в две строчки: открытие файла и собственно чтение, которое производится с помощью итераторов (а-ля указатели).
ifstream f("слова.txt");
vector<string> words((istream_iterator<string>(f)), istream_iterator<string>());
Если первый аргумент конструктора std::vector
не взять в скобки, вся строчка будет интерпретирована как объявление функции, а не объекта.
Использование:
cout << "Вот первое слово: " << words[0];
cout << "Всего прочитано слов: " << words.size();
А благодаря автоматическому вызову деструктора при достижении конца блока, в котором объявлен вектор, память освобождается сама. Дополнительно ничего писать не надо.
std::vector - это массив с динамическим размером. Не нужно придумывать велосипед, найдите пример его использования и примените у себя.
Виртуальный выделенный сервер (VDS) становится отличным выбором
В данном вопросе речь пойдет о QAbstractListModel, а точнее, о проблеме возникшей при использовании данного класса в MapItemViewСразу перейдем к коду:
g++/Code::Blocks/Ubuntu Gnome При попытке компиляции из codeblocks указанного ниже кода вылетает ошибкаНо любопытен тот факт, что выполнение тех же команд...
Почему перегрузка операторов через методы класса приоритетней чем через функции?