2011-06-20 44 views
15

Tôi có một vectơ lớn.Cách viết các giá trị vector vào một tập tin

Cách tôi sử dụng nhân thời gian chạy của chương trình rất nhiều. Đầu tiên là viết tất cả các giá trị cho một chuỗi khi chúng được tính toán bằng cách sử dụng stringstreams và sau đó ghi chuỗi vào một tệp. Phương pháp khác là tạo một chuỗi dài sau khi thực tế và ghi nó vào tệp. Tuy nhiên, cả hai đều rất chậm.

Có cách nào để chỉ ghi giá trị của vectơ vào tệp văn bản ngay lập tức bằng ngắt dòng không?

+2

"Có cách nào để chỉ cần viết các giá trị của vector vào file văn bản ngay lập tức mà không có ngắt dòng? " - Bạn cần có hoặc không có ngắt dòng ?? – Ajay

+1

Nó làm cho tôi vui khi thấy chương trình của tôi kết thúc những gì trước đây đã mất 3 giờ trong 5 phút XD – TimeCoder

Trả lời

33

Sử dụng std::ofstream, std::ostream_iteratorstd::copy() là cách thông thường để thực hiện việc này. Dưới đây là một ví dụ với std::string s sử dụng C++ 98 cú pháp (các câu hỏi được hỏi pre-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); 
} 
+2

Bạn nên cẩn thận bằng cách sử dụng một chuỗi làm ví dụ. Khi trò chuyện tải một vectơ của chuỗi là khác nhau (nó là loại tiêu chuẩn duy nhất nơi đầu ra/đầu vào sẽ khác nhau). –

+11

Bạn viết "câu hỏi đã được hỏi trước C++ 11" - có cách nào khác với C++ 11 để làm điều này không? – Default

4

Có lẽ tôi đã bỏ lỡ một cái gì đó, nhưng những gì là sai với:

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

Đó tránh được việc phải làm chuỗi nối tiềm năng bậc hai, mà tôi giả sử là những gì đang giết thời gian chạy của bạn.

+0

Xin lỗi, v và X đại diện cho điều gì? – TimeCoder

+0

'v' là vector chứa của bạn. 'X' là loại chứa trong đó. – Johnsyweb

6
#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"; 
} 
Các vấn đề liên quan