如何正确清理包含向量c++;? 我是C++初学者。我遇到了清理包含向量的结构的问题

如何正确清理包含向量c++;? 我是C++初学者。我遇到了清理包含向量的结构的问题,c++,vector,struct,C++,Vector,Struct,这是我的结构: namespace std { struct EvalItem { unsigned int _c; // client unsigned int _t; // tour unsigned int _p; // position unsigned int _dem; vector<unsigned int> _deltatScenario; // difference in travel length EvalIte

这是我的结构:

namespace std {

struct EvalItem {
    unsigned int _c; // client
    unsigned int _t; // tour
    unsigned int _p; // position
    unsigned int _dem;
    vector<unsigned int> _deltatScenario; // difference in travel length

    EvalItem(const unsigned int & c, const unsigned int & t, const unsigned int & p,
                 const unsigned int & dem)
                 :_c(c), _t(t), _p(p),_dem(dem){};


};
名称空间std{
结构评估{
无符号int _c;//客户端
无符号int _t;//巡更
无符号int _p;//位置
无符号整数;
向量_deltatScenario;//行程长度差异
EvalItem(常数无符号整数与c、常数无符号整数与t、常数无符号整数与p、,
常量(无符号整数和数字高程模型)
:_c(c),_t(t),_p(p),_dem(dem){};
};
现在,在某些函数中,我使用了这个结构;如下所示:

void function1()
{
  vector<EvalItem> best;
   ......
   .....
   ......
while(client.size()>0
{
............
...........

    if(best.size()==0)
     {
        best.clear();
      best.push_back(eval);

    }else if(this->_problem->better(eval._deltatScenario,best[0]._deltatScenario)){

        best.clear();
        best.push_back(eval);
    }else if(eval._deltatScenario==best[0]._deltatScenario){
      best.push_back(eval);

        }
    }
}
 }
void function1()
{
矢量最佳;
......
.....
......
而(client.size()>0
{
............
...........
if(best.size()==0)
{
最佳。清除();
最好。推回(eval);
}否则,如果(此->问题->更好(评估。\u deltatScenario,最佳[0]。\u deltatScenario)){
最佳。清除();
最好。推回(eval);
}else if(eval.\u deltatScenario==最佳[0]。\u deltatScenario){
最好。推回(eval);
}
}
}
}
在“while”的第一次迭代中,它起作用了,我得到了具有正确值的最佳值,但在第二次迭代中,如果程序清理我的结构以放入新值,则这不起作用,我得到了一个空的最佳值

我用图片来解释这种情况:

第一次迭代: 我有最好的价值观

但在第二次迭代中,当程序清理我的best以放入新值时,我在best中有空行,如下所示:


我不知道是什么问题,你能帮我吗???

首先,不要把你的代码放在
命名空间std
中,这可能会导致不良后果

第二,不要在名字的开头加一个下划线,它可能是一个宏,你甚至不知道发生了什么

关于
std::vector
:vector以指数方式分配内存,一种实现可能是它分配的内存是分配之前分配的内存的两倍(如1,2,4,8,16…)。例如,如果您在某一点上拥有1000个元素,然后将其清除,则分配的内存仍然存在,例如,在
clear()
之后,仍为1024个对象分配了空间。如果您要取消分配该内存,您可以调用
shrink\u to\u fit
,或将新的空向量分配给现有的向量:

std::vector<int> vec;
std::cout << vec.capacity() << std::endl; //0

for(size_t i=0; i<1000; ++i)
    vec.push_back(0);
std::cout << vec.capacity() << std::endl; //1024

vec.clear();
std::cout << vec.capacity() << std::endl; //1024

vec.shrink_to_fit();
std::cout << vec.capacity() << std::endl; //0

for(size_t i=0; i<2000; ++i)
    vec.push_back(0);
std::cout << vec.capacity() << std::endl; //2048

vec = std::vector<int>();
std::cout << vec.capacity() << std::endl; //0
std::向量向量向量机;

std::不能请不要在std名称空间中添加用户代码谢谢你的评论,但是为什么?@mouaci\u-Med因为这会使你的程序格式不正确。@mouaci\u-Med你在使用调试器,但是为什么你不单步执行你的程序,观察变量,检查程序流,等等?@PaulMcKenzie,我这么做了,但我不知道为什么当我清理“best”以放入新值时,我遇到了这个问题,所有变量都正常工作,但是当我清理“best”以放入新值时,我遇到了问题谢谢你的回答,但我没有发现函数收缩到适配();
收缩到适配
是c++11