【发布时间】:2011-01-21 16:59:45
【问题描述】:
我想避免不必要的复制。我的目标是:
std::ifstream testFile( "testfile", "rb" );
std::vector<char> fileContents;
int fileSize = getFileSize( testFile );
fileContents.reserve( fileSize );
testFile.read( &fileContents[0], fileSize );
(这不起作用,因为reserve 实际上并没有在向量中插入任何东西,所以我无法访问[0])。
当然,std::vector<char> fileContents(fileSize) 有效,但是初始化所有元素会产生开销(fileSize 可能相当大)。 resize() 也一样。
这个问题与开销的重要性无关。相反,我只是想知道是否还有其他方法。
【问题讨论】:
-
如果您想避免
push_back所需的重新分配成本并且您想避免使用resize所需的缓冲区归零成本,请不要使用std::vector根本没有:使用boost::scoped_array或类似的东西。