Re: std::string::assign range
On 3/6/2015 2:19 AM, Juha Nieminen wrote:
Ben Bacarisse <ben.usenet@bsb.me.uk> wrote:
std::copy(std::istream_iterator<char>(file),
std::istream_iterator<char>(),
std::inserter(textToParse, textToParse.begin()));
What's the problem with
std::string textToParse(std::istream_iterator<char>(file),
std::istream_iterator<char>());
--- news://freenews.netfront.net/ - complaints: news@netfront.net ---
Just that I don't know it, but that looks to be better.
So, taking your suggestions in combination with Victor's, here is my
current listing:
// Shared Includes
#include "Exception.h"
#include "PerformanceTimer.h"
// Standard Includes
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cstdio>
const unsigned int NUM_ITERATIONS = 100;
//--------------------------------------------------------------------------------------------------
void Method1()
{
std::ifstream file("test.txt");
if( !file )
{
// Error
throw Shared::Exception(__FILE__, __LINE__, "Cannot open test
file");
}
std::string textToParse(std::istream_iterator<char>(file),
std::istream_iterator<char>());
file.close();
}
//--------------------------------------------------------------------------------------------------
void Method2()
{
std::ifstream file("test.txt");
if( !file )
{
// Error
throw Shared::Exception(__FILE__, __LINE__, "Cannot open test
file");
}
std::string textToParse;
file >> std::noskipws;
std::copy(std::istream_iterator<char>(file),
std::istream_iterator<char>(),
std::inserter(textToParse, textToParse.begin()));
file.close();
}
//--------------------------------------------------------------------------------------------------
void Method3()
{
std::ifstream file("test.txt");
if( !file )
{
// Error
throw Shared::Exception(__FILE__, __LINE__, "Cannot open test
file");
}
std::stringstream textToParse;
textToParse << file.rdbuf();
file.close();
}
//--------------------------------------------------------------------------------------------------
int main()
{
Method1();
Method2();
Method3();
Shared::PerformanceTimer timer;
for(unsigned count = 0; count < NUM_ITERATIONS; ++count)
{
Method1();
}
std::cout << "Method 1 :" << timer.Stop() << std::endl;
timer.Start();
for(unsigned count = 0; count < NUM_ITERATIONS; ++count)
{
Method2();
}
std::cout << "Method 2 :" << timer.Stop() << std::endl;
timer.Start();
for(unsigned count = 0; count < NUM_ITERATIONS; ++count)
{
Method3();
}
std::cout << "Method 3 :" << timer.Stop() << std::endl;
}
and the output is:
Method 1 :0.012716
Method 2 :0.361421
Method 3 :0.141371
--
I have chosen to troll filter/ignore all subthreads containing the
words: "Rick C. Hodgins", "Flibble", and "Islam"
So, I won't be able to see or respond to any such messages
---