我想问一下调用queue.pop()时内存是否被释放? 因为在堆栈中我们只是递增或递减指针,但内存仍然没有被释放。
问题是:WAP 打印一个大日志文件的最后 n 行。
我将行保存在队列中,然后在计数 >n 时弹出行。
这是一个好的编码习惯吗?
如果不是,可以做些什么来释放内存?
我编码的是:
#include<iostream>
#include<queue>
#include<fstream>
using namespace std;
void lastN(char *fileName, int N)
{
queue<string> q;
int count=0;
string line;
ifstream mf(fileName);
if(mf.is_open())
{
while(!mf.eof())
{
getline(mf,line);
count++;
q.push(line);
if(count>N)q.pop();
}
mf.close();
}
else cout<<"cannot open file\n";
count=1;
while(q.size())
{
printf("line no %2d :: ",count++);
cout<<q.front()<<endl;
q.pop();
}
cout<<endl;
}
int main(void )
{
char *fileName="file.txt";
ofstream mf(fileName);
if(mf.is_open())
{
mf<<"line 0";
mf<<"line 1\nline 2\nline 3\nline 4\n\n\n";
mf.close();
}
else cout<<"cannot create file\n";
lastN(fileName,5);
getchar();
return 0;
}
最佳答案
您的 queue
按值保存 string
对象,因此调用 pop
将销毁字符串并释放与其关联的内存。
关于c++ - 队列中 pop() 的内存浪费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837150/