我是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 我的结构放置新值,这不起作用,我有一个空最佳。
我把图片解释了更多这种情况:
第一次迭代: 我有最好的价值
但是在第二次迭代中,当程序清理我最好放置新值时,我最好有空行,如下所示:
我不知道这是什么问题,你能帮我吗?? !!
答案 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