我需要将一个文件复制到一个字符串中。我需要某种方法来为该字符串对象预分配内存,以及一种直接将文件内容读取到该字符串内存中的方法?
发布于 2010-07-22 04:30:27
用于预分配的std::string
has a .reserve
method。
std::string s;
s.reserve(1048576); // reserve 1 MB
read_file_into(s);
发布于 2010-07-22 04:30:09
这应该是您需要的全部内容:
ostringstream os;
ifstream file("name.txt");
os << file.rdbuf();
string s = os.str();
这将从file
中读取字符并将它们插入到字符串流中。之后,它将获取在幕后创建的字符串。请注意,我落入了以下陷阱:使用提取操作符将跳过初始空格。必须使用如上的插入操作符,或使用noskipws
操纵器:
// Beware, skips initial whitespace!
file >> os.rdbuf();
// This does not skip it
file >> noskipws >> os.rdbuf();
这些函数被描述为逐个字符地读取流(虽然不确定这里可能进行哪些优化),但我没有对它们进行计时以确定它们的速度。
发布于 2010-07-22 04:53:06
为了好玩,这里有另一种方法:
// Beware, brain-compiled code ahead!
std::ifstream ifs( /* ... */ );
if( !ifs.good() ) return; // whatever
std::string str;
ifs.seekg( 0, std::ios_base::end );
const std::streampos pos = ifs.tellg();
ifs.seekg( 0, std::ios_base::beg );
if( pos!=std::streampos(-1) ) // can get stream size?
str.reserve(static_cast<std::string::size_type>(pos));
str.assign( std::istream_iterator<char>(ifs)
, std::istream_iterator<char>() );
我希望我没有搞砸了。
https://stackoverflow.com/questions/3303527
复制相似问题