目前,我使用此模板方法读取文件并将内容存储到std :: vector:
template <class T> std::vector<T> FileToBuffer(const std::string pathToFile, std::vector<T> *ignoreList = NULL, bool binary = false)
{
std::vector<T> fileBuffer;
std::ifstream file;
try
{
if(binary) file.open(pathToFile, std::ios::in | ios::binary);
else file.open(pathToFile, std::ios::in);
if (file)
{
// get length of file:
file.seekg (0, file.end);
int length = file.tellg();
file.seekg (0, file.beg);
fileBuffer.resize(length);
file.read((char*)fileBuffer.data(), length);
file.close();
// remove unwanted elements
if(ignoreList != NULL)
{
for(std::vector<T>::iterator it=ignoreList->begin(); it!=ignoreList->end(); it++)
{
fileBuffer.erase(std::remove(fileBuffer.begin(), fileBuffer.end(), *it), fileBuffer.end());
}
}
}
}
catch(std::exception &exp)
{
fileBuffer.clear();
}
return fileBuffer;
}
要过滤不需要的元素,我会浏览整个矢量并将其删除!有没有更好的方法在读取过程中立即过滤不需要的元素? (实际上我需要这个来删除换行和回车)
谢谢!
答案 0 :(得分:0)
这应该有效:
if (file)
{
T object;
while ( file.read((char*)(&object), sizeof(T)) )
{
bool found = false;
if(ignoreList != NULL)
{
auto iter = std::find(ignoreList->begin(), ignoreList->end(), object);
found = (iter != ignoreList->end());
}
if ( !found )
{
fileBuffer.push_back(object);
}
}
file.close();
}