Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>It depends on the size of the data you want to manipulate. My two samples has been tested.</p> <p>You can use a class which handles some raw pointers</p> <pre><code>#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; class file_vector { public: file_vector() {} virtual ~file_vector() { for( std::vector&lt; std::ifstream* &gt;::iterator it = m_file_streams.begin(); it != m_file_streams.begin(); it++) { std::ifstream * p_stream = *it; delete p_stream; } } void append_file(const std::string&amp; file_name) { std::ifstream * p_stream = new std::ifstream( file_name.c_str() ); if(p_stream-&gt;is_open()) m_file_streams.push_back(p_stream); else delete p_stream; } void reset() { for( std::vector&lt; std::ifstream* &gt;::iterator it = m_file_streams.begin(); it != m_file_streams.end(); it++) { std::ifstream * p_stream = *it; p_stream-&gt;seekg(0,p_stream-&gt;beg); } } size_t size() { return m_file_streams.size(); } std::ifstream &amp; get(size_t index) { return * m_file_streams.at(index); // Using at because of index check } std::ifstream &amp; operator [] (size_t index) { return get(index); } private: std::vector&lt; std::ifstream* &gt; m_file_streams; }; int main() { file_vector files_content; files_content.append_file("file1.txt"); files_content.append_file("file2.txt"); files_content.append_file("file3.txt"); for(size_t i = 0; i &lt; files_content.size(); i++) { std::string current_line; while(std::getline(files_content[i],current_line)) std::cout &lt;&lt; current_line &lt;&lt; std::endl; } files_content.reset(); // To make getline usable again return 0; } </code></pre> <p>Or a std::vector&lt; std::vector&lt; std::string > >. That's a basic solution for small files but it works.</p> <pre><code>#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; typedef std::vector&lt; std::string &gt; string_vec; typedef std::vector&lt; std::string &gt;::iterator string_it; typedef std::vector&lt; string_vec&gt; file_vec; typedef std::vector&lt; string_vec &gt;::iterator file_it; int main() { string_vec file_names; file_names.push_back("file1.txt"); file_names.push_back("file2.txt"); file_names.push_back("file3.txt"); file_vec files_content; string_vec empty_file_content; for(string_it file_name = file_names.begin(); file_name != file_names.end(); file_name++) { std::ifstream input_stream( file_name-&gt;c_str() ); files_content.push_back(empty_file_content); if(input_stream.is_open()) { string_vec &amp; current_file_content = files_content[ files_content.size() - 1 ]; std::string current_line; while(std::getline(input_stream, current_line)) current_file_content.push_back(current_line); } } // Some stuff // Reading the content later on for(file_it file = files_content.begin(); file != files_content.end(); file++) { for(string_it line = file-&gt;begin(); line != file-&gt;end(); line++) { std::cout &lt;&lt; *line &lt;&lt; std::endl; } } return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload