stl 常见问题

来源:互联网 发布:java飞机大战扇形子弹 编辑:程序博客网 时间:2024/06/07 16:29

一:vector

1  vector 内存泄漏

当vector中含有指针,不仅要erase 这个元素。而且element指向的空间也要delete掉

要将it delete掉,仅仅erase不可以,没人释放disk,造成内存泄漏

eg:

Disk *tempdisk = *it;

 vector<Disk*> watched_disks;

             it = watched_disks.erase(it);
                delete tempdisk; //释放


2  (*ret)整体看成一个对象,类似 vecotr vec;  vec[1] 

#include <vector>
#include <iostream>
using namespace std;

main()
{
      vector <int>      *ret;
      ret = new vector<int>[5];
      ret->push_back(0);
      ret->push_back(1);
      ret->push_back(2);
      ret->push_back(3);

      cout <<(*ret)[1]<<endl;
      cout <<ret->front()<<endl;
}


3 遍历数组
#include <vector>
#include <iostream>
using namespace std;


main()
{
        vector<int> v{1,2,3,4,5,6,7,8,9};
//i is local variable. so two i is different
//&i is refence for v[0],[1]...
        for (auto &i :v)
        {
                cout <<"line9:"<<i<<endl;
                i*=i;
                cout <<"line11:"<<i<<endl;
        }
//i is just variable
for (auto i :v)
        {
                cout <<"line9:"<<i<<endl;
                i*=i;
                cout <<"line11:"<<i<<endl;
        }

        for (auto i : v)
                cout <<i<<" ";
        cout <<endl;
}

vector remove是假删,那用它干嘛?直接用erase就完了。因为用法简便,不用for

5 vector 莫名其妙 coredump 到pushback(*p) reallocate 的时候出现, 改成 list 没问题了
       
原创粉丝点击