读书人

想封装一上vector类型

发布时间: 2013-02-02 12:27:16 作者: rapoo

想封装一下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类型”,建议使用迭代器,因为迭代器通用啊!

读书人网 >C++

热点推荐