Как записать векторные значения в файл - PullRequest
19 голосов
/ 20 июня 2011

У меня большой вектор.

Способы, которыми я пользуюсь, значительно увеличивают время выполнения программы. Первый - записать все значения в строку, когда они вычисляются с использованием stringstreams, а затем записать строку в файл. Другой метод - создать длинную строку после факта и записать ее в файл. Тем не менее, оба они очень медленные.

Есть ли способ просто записать значения вектора в текстовый файл сразу с разрывом строки?

Ответы [ 4 ]

41 голосов
/ 20 июня 2011

Использование std::ofstream, std::ostream_iterator и std::copy() - это обычный способ сделать это.Вот пример с std::string с использованием синтаксиса C ++ 98 (вопрос был задан до C ++ 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);
}
10 голосов
/ 28 сентября 2016

Если у вас есть C ++ 11:

#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";
}
5 голосов
/ 20 июня 2011

Может быть, я что-то упустил, но что не так с:

std::ofstream f("somefile.txt");
for(vector<X>::const_iterator i = v.begin(); i != v.end(); ++i) {
    f << *i << '\n';
}

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

2 голосов
/ 20 июня 2011

Вы можете использовать std :: copy и std :: ostream_iterator .

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