我怎样才能正确清理包含vector c ++的struct?

时间:2016-03-27 18:00:59

标签: 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

    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){};


};

现在,在某些函数中我使用这个结构;那样:

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);

        }
    }
}
 }

在“while”的第一次迭代中它起作用,我的最佳具有correcte值但在第二次迭代中并且如果程序 clean 我的结构放置新值,这不起作用,我有一个空最佳

我把图片解释了更多这种情况:

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

enter image description here

但是在第二次迭代中,当程序清理我最好放置新值时,我最好有空行,如下所示: enter image description here

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

1 个答案:

答案 0 :(得分:0)

首先,不要将您的代码放在namespace std中,这可能会导致不良后果。

其次,不要用单下划线开始名字,它可能是一个宏,你甚至不知道发生了什么。

关于std::vector:Vector指定内存指数,一个实现可能是它分配了它在分配之前分配的内存的两倍(如1,2,4,8,16 ......)。如果您 - 在某个时刻 - 在向量中有1000个元素,然后清除它,则分配的内存仍然存在,例如,clear()之后仍然为1024个对象分配空间。如果要释放该内存,可以调用shrink_to_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