关于opencv中Vector内存释放或者元素清空的问题
目的:在一个循环中,每一次循环结束都要清空这个vector容器以供下一次循环再利用这个vector方法:vector<double>m1;vector<double>m2;m1.swap(m2);这样就把m1中的元素转移到了m2中,下面我们来看一下结果示例:vector<double>distance;//创建一个向量distance.push_back(2.236);//往向
目的:在一个循环中,每一次循环结束都要清空这个vector容器以供下一次循环再利用这个vector
方法:
vector<double>m1;
vector<double>m2;
m1.swap(m2);
这样就把m1中的元素转移到了m2中,下面我们来看一下结果示例:
vector<double>distance;//创建一个向量
distance.push_back(2.236);//往向量里面添加元素
distance.push_back(1.732);
distance.push_back(2);
distance.push_back(0.2358);
distance.push_back(0.001);
vector<double>dd;//创建一个新的向量
distance.swap(dd);//清空distance,将元素专一到dd中
//【1】检测一下dd向量和distance向量中的元素
cout << "dd中的元素:" << dd[2] << endl;//输出dd向量中第三个元素
cout << "distance中的元素:" << distance[0] << endl;//输出distance中第一个元素
//【2】我们再在distance中加入一个元素
distance.push_back(0.225);
cout << distance[0] << endl;//此时再输出distance第一个元素
我们先看一下直接得出什么结果:
dd向量中已经有元素了,dd[2]元素之为2,也就是最初的distance[3]的数值,然后再输出distance中的元素时,程序报错,因为distance中已经没有元素了。
我们把【1】注释掉之后在跑程序,得出结果如下:
程序跑通了,我们再往distance中加入一个数据,则该数据在distance中的第一个位置。
以上例子说明swap把distance向量给清空了,这个问题就解决了,我们来检测一下distance的大小:
cout<<"释放之后的distance大小为:"<<distance.size()<<endl;
得出结果如下:
问题解决啦!
如果循环层数非常多也不用担心,就一直用swap函数往另一个向量中释放就可以了,因为vector容器可以承载数据量非常大:
——————————————————————
遇到这个问题的时候我查看了其他的博客和论坛,有些提到用erase和clear函数来星空vector容器的,下面我们来看一下这两个函数能达到什么效果:
erase()函数:
distance.erase(distance.begin(),distance.end());//利用erase函数
cout << "释放后的distance大小:" << distance.size() << endl;//检测释放后的大小
cout << "distance中的元素:" << distance[0] << endl;//检测distance中是否还有元素
程序运行结果如下:
内存大小为0,而distance中还有元素,并没有清空!!
clear()函数:
distance.clear();
cout << "释放后的distance大小:" << distance.size() << endl;
cout << "distance中的元素:" << distance[0] << endl;
结果如下:
clear()函数和erase()函数两者得出的结果一样,并有达到我们想要的结果:即vector清空,内存释放!!!
更多推荐
所有评论(0)