C++ 需要帮助删除加载的数组并将其从计数中清除吗

C++ 需要帮助删除加载的数组并将其从计数中清除吗,c++,arrays,count,C++,Arrays,Count,我一直在乱搞一些代码。我只是把东西混在一起,想办法从中得到我想要的东西 现在困扰我的是,当我试图删除一个用户时,它会将该用户留空,而不是完全删除。我希望它完全删除/删除该行,并在不删除任何其他用户数据的情况下调整计数 编辑: 问题是在我删除一个用户之后。当我列出每个用户时,它会显示一个空白的user:pass:etc,而不是不列出要开始的用户。如果我要保存文件,它将有5个空格。我宁愿它完全删除这些行,就好像它们从一开始就不存在一样 这是我加载代码的方式: int Loadpdata() { i

我一直在乱搞一些代码。我只是把东西混在一起,想办法从中得到我想要的东西

现在困扰我的是,当我试图删除一个用户时,它会将该用户留空,而不是完全删除。我希望它完全删除/删除该行,并在不删除任何其他用户数据的情况下调整计数

编辑: 问题是在我删除一个用户之后。当我列出每个用户时,它会显示一个空白的user:pass:etc,而不是不列出要开始的用户。如果我要保存文件,它将有5个空格。我宁愿它完全删除这些行,就好像它们从一开始就不存在一样

这是我加载代码的方式:

int Loadpdata()
{

ifstream fp_in;

if(count > 0)
{
    cout << "pdata already Loaded.\nTotal of " << count << " users loaded." << endl;

    return 0;

}


fp_in.open("p.data"); //Open user file

if(fp_in == NULL)
{
    cout << "Could not open user file, exiting." << endl;
}

while(!fp_in.eof()) { //While there is something to read

    getline(fp_in,userd[count]);
    getline(fp_in,passd[count]);  //Read a line from the file
    getline(fp_in,aged[count]);  //Read a line from the file
    getline(fp_in,locationd[count]);  //Read a line from the file
    getline(fp_in,emaild[count]);  //Read a line from the file
    getline(fp_in,mid[count]);  //Read a line from the file


    cout << "User: " << userd[count] << " Loaded Successfully." << endl;
    userstotal++;
    count++;
}
fp_in.close(); //Done with the user file

cout << "Total Users Loaded: " << count << endl;

if(!count > 0)
{
    cout << "Userlist is empty, exiting" << endl;
    return -2;
}
return 0;

}
int-Loadpdata()
{
如果流fp_in;
如果(计数>0)
{

cout不清除位置x处的元素,而是在向量上使用擦除(必须是std::vector,而不是C-array)

如果您只想删除一个条目而不接触任何其他条目,则需要使用基于节点的容器,例如
std::list
std::map
(不管怎样,后者都能满足您通过键定位对象的需要)

也就是说,如果您想坚持使用阵列并填补空白,您有两个基本选项:

  • 如果您不关心对象的顺序,那么只需
    std::swap()
  • 如果顺序对您很重要,您需要将间隙后的所有对象向前移动。最简单的方法可能是使用
    std::remove\u If()
  • 顺便说一句,尝试读取文件并在.eof()中检查
    not工作可靠。特别是,当没有更多对象时
    eof()
    可能是或可能不是
    true
    ,并且在读取后不检查读取是否成功。还要注意
    eof()
    可能永远不会变为
    true
    ,例如,如果文件包含格式错误并进入失败状态。您应该使用以下方法读取数据

    while (std::getline(in, userd[count])
        && std::getline(in, passd[count])
        // ...
        && std::getline(in, mid)) {
        ++count;
    }
    

    那么到底是什么问题呢?您没有指定。是不是有些东西工作不正常?如果您想查看代码,请转到如果您想更新数据文件,则需要写出所有记录-当然要忽略任何已删除的记录。您是否试图从文件中序列化和反序列化类的实例?请使用库,如boost.serialization。如果你自己滚动,这种任务可能非常容易出错。我刚刚编辑了帖子,我的不好。问题是,在我删除一个用户后。当我列出每个用户时,它会显示一个空白的user:pass:etc,而不是一开始就不列出。如果我要保存文件,它将有5个空格。我宁愿它删除这些行这完全是因为它们从一开始就不存在。谢谢。我以前没听说过map,这很管用。到目前为止,我只是对它做了一点修改,但我遇到了一个问题。我使用extern map userdb;这导致了一个问题。我在加载它之前使用它作为字符串,它工作得很好。有什么想法吗?使用该代码代替eof有助于sa我遇到了一个问题。谢谢你,先生。nvm我得到了地图,可以在外部的其他文件中工作,只是缺少了#include和namespace
    while (std::getline(in, userd[count])
        && std::getline(in, passd[count])
        // ...
        && std::getline(in, mid)) {
        ++count;
    }