想封装一上vector类型
想封装一下vector类型
因为vector访问成员的时候,有时候要迭代器类型有时候要int类型,很不方便,所以想封装一下。感觉下面的方法好像做不到,有什么好方法吗
------解决方案--------------------
迭代器访问和下标访问?
------解决方案--------------------
你要哪样啊?
------解决方案--------------------
没必要吧,把问题弄复杂了...,如果是list这些结构你怎么办..
------解决方案--------------------
楼主慢慢实现吧..
v.erase( v.begin()+1 );直接删除就行
------解决方案--------------------
试试受保护继承或私有继承,不要用组合,因为你需要写很多方法以转发。
------解决方案--------------------
vector已经很好用了,还封装个啥啊!
至于说“因为vector访问成员的时候,有时候要迭代器类型有时候要int类型”,建议使用迭代器,因为迭代器通用啊!
因为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 );直接删除就行
------解决方案--------------------
试试受保护继承或私有继承,不要用组合,因为你需要写很多方法以转发。
#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类型”,建议使用迭代器,因为迭代器通用啊!