我想避免不必要的副本。我的目標線沿線的東西:將文件讀入std :: vector的有效方法<char>?
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`所需的重新分配成本_and_您想要避免使用`resize`所需的緩衝區清零的成本,請根本不要使用`std :: vector`:use a `boost :: scoped_array`或類似的東西。 – 2011-01-21 17:32:04