想封装一上vector类型

想封装一下vector类型
本帖最后由 xiaoyuanyuan2009 于 2013-01-20 18:59:03 编辑
因为vector访问成员的时候,有时候要迭代器类型有时候要int类型,很不方便,所以想封装一下。感觉下面的方法好像做不到,有什么好方法吗
template<typename T>
class MyVector
{
public:
     MyVector();
private:
     vector<T> v;
};

template<typename T>
MyVector<T>::MyVector()
{
  //怎么给v成员的类型传递进去,要传的类型就是  MyVector 收到的类型
}

------解决方案--------------------

  迭代器访问和下标访问?
------解决方案--------------------
你要哪样啊?
------解决方案--------------------
没必要吧,把问题弄复杂了...,如果是list这些结构你怎么办..
------解决方案--------------------
楼主慢慢实现吧.. 
  v.erase( v.begin()+1 );直接删除就行
------解决方案--------------------
引用:
引用:你要哪样啊?

比如 erase 函数删除个元素,他需要迭代器,我嫌麻烦,所以想封装一下改用 int 类型删除


试试受保护继承或私有继承,不要用组合,因为你需要写很多方法以转发。
#include <vector>
#include <iostream>

template <typename T>
struct MyVector : protected std::vector<T>
{
  //just list those members we would like to public here
  typedef std::vector<T> base_type;
  using base_type::push_back;
  using base_type::operator[];
 
  void erase(size_t i)
  {
    if(i < base_type::size())
    {
      base_type::erase(base_type::begin()+i);
    }
  }
};

int main()
{
  MyVector<double> v;
  v.push_back(1.0);
  std::cout << v[0] << std::endl; //1.0
  v.push_back(2.0);
  v.erase(0);
  std::cout << v[0] << std::endl; //2.0
  return 0;
}

------解决方案--------------------
vector已经很好用了,还封装个啥啊!
至于说“因为vector访问成员的时候,有时候要迭代器类型有时候要int类型”,建议使用迭代器,因为迭代器通用啊!