Как записать векторные значения в файл
У меня большой вектор.
Способы, которые я использую, умножают время выполнения программы. Первый - записать все значения в строку, поскольку они вычисляются с помощью stringstreams
, а затем записывают строку в файл. Другой метод - сделать длинную строку после факта и записать это в файл. Однако, оба они очень медленные.
Есть ли способ сразу записать векторные значения в текстовый файл с разрывами строк?
Ответы
Ответ 1
Используя std::ofstream
, std::ostream_iterator
и std::copy()
- это обычный способ сделать это. Ниже приведен пример с std::string
с использованием синтаксиса С++ 98 (вопрос был задан до С++ 11):
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> example;
example.push_back("this");
example.push_back("is");
example.push_back("a");
example.push_back("test");
std::ofstream output_file("./example.txt");
std::ostream_iterator<std::string> output_iterator(output_file, "\n");
std::copy(example.begin(), example.end(), output_iterator);
}
Ответ 2
#include <fstream>
#include <vector>
#include <string>
int main()
{
std::vector<std::string> v{ "one", "two", "three" };
std::ofstream outFile("my_file.txt");
// the important part
for (const auto &e : v) outFile << e << "\n";
}
Ответ 3
Возможно, я что-то пропустил, но что не так:
std::ofstream f("somefile.txt");
for(vector<X>::const_iterator i = v.begin(); i != v.end(); ++i) {
f << *i << '\n';
}
Это позволяет избежать потенциальной квадратичной конкатенации строк, что я предполагаю, это то, что убивает ваше время выполнения.
Ответ 4
Вы можете использовать std:: copy и std:: ostream_iterator.