C++ C++;模板类
嘿。。 我在做一些家庭作业方面遇到了困难 我们正在研究VectorList(有点像链表,但有向量-不要问为什么…) 不管怎样,我有这样的想法:C++ C++;模板类,c++,class,templates,function,C++,Class,Templates,Function,嘿。。 我在做一些家庭作业方面遇到了困难 我们正在研究VectorList(有点像链表,但有向量-不要问为什么…) 不管怎样,我有这样的想法: #ifndef VECTORLIST_H #define VECTORLIST_H #include <iostream> #include <vector> using namespace std; template< typename NODETYPE > class VectorList { publ
#ifndef VECTORLIST_H
#define VECTORLIST_H
#include <iostream>
#include <vector>
using namespace std;
template< typename NODETYPE >
class VectorList
{
public:
VectorList(); // constructor
~VectorList(); // destructor
void insertAtFront( const NODETYPE & );
void insertAtBack( const NODETYPE & );
bool removeFromFront( NODETYPE & );
bool removeFromBack( NODETYPE & );
bool isEmpty() const;
void print() const;
private:
vector< NODETYPE > *vList; // list data as a vector
};
\ifndef矢量列表
#定义向量列表
#包括
#包括
使用名称空间std;
模板
类向量表
{
公众:
VectorList();//构造函数
~VectorList();//析构函数
void insertafront(const NODETYPE&);
void insertback(const节点类型&);
从前面移除布尔(节点类型&);
bool-removeFromBack(NODETYPE&);
bool isEmpty()常量;
无效打印()常量;
私人:
vector*vList;//将数据列为向量
};
我需要填写函数。。我的问题是我不明白怎么做
当我有*列表时使用STIL。。它是指向第一个向量元素的指针
// display contents of VectorList
template< typename NODETYPE >
void VectorList< NODETYPE >::print() const
{
// Fill in the missing code
}
//显示矢量列表的内容
模板
void VectorList::print()常量
{
//填写缺少的代码
}
我的想法是在向量上使用for循环并使用
cout你应该在构造函数中构造你的对象(如果你真的需要使用裸指针):vList=newvector()代码>,析构函数中的可用内存:删除vList代码>,将您的方法转换为容器类的相应方法。例如,insertback
将实现为vList->push_-back(elem)代码>
我的问题是,我不明白当我
我有一份清单。。它是指向第一个向量元素的指针
// display contents of VectorList
template< typename NODETYPE >
void VectorList< NODETYPE >::print() const
{
// Fill in the missing code
}
我假设你的家庭作业要求你使用指向向量的指针,而不是向量本身。通常,我从不使用指向容器的指针。事实上,我发现在从C切换到C++中,最好的是,由于STL编程,我可以不用指针来编写整个程序。除非您需要使用指向向量的指针,否则我建议您直接使用向量
当然,使用向量比使用指针更容易,但不要担心。使用指针还不错
首先,为了使用指向某物的指针,必须分配某物。因此,在构造函数中,调用new
vList = new std::vector<NODETYPE>;
你说:
但由于vList是一个指针。。它不太好用
这里是生活变得轻松的地方。通常,如果p
是指向某个类型的指针,则(*p)
是p
指向的对象。以下是一些例子:
int i = 1;
int *pInt = &i;
i = 4;
(*pInt) = 4;
std::cout << i << " " << (*pInt) << "\n";
std::vector<NODETYPE> v;
std::vector<NODETYPE> *pVector;
v.push_back();
(*pVector).push_back();
it = v.begin();
it = (*pVector).end();
有一个快捷运算符->
,使上述内容更易于阅读:
void insertAtFront(const NODETYPE& node) { vList->push_front(node); }
表达式x->y
或多或少相当于(*x).y
总而言之:
使用new
在构造函数中分配vList
。使用delete
销毁析构函数中的vList
。使用(*vList).function()或vList->function()调用vList的成员
祝你好运,如果你还有其他问题,请回来
P.S.因为你有一个非平凡的析构函数,你需要考虑.< /P>
p.p.s.您说过在析构函数中迭代向量并删除在那里找到的每个对象。如果您的数据类型是指向节点类型的指针向量(与您声明的相反:指向节点类型向量的指针),则只需要这样做。除非您完全熟悉指针,否则我建议您不要将指针存储在STL容器中 添加了家庭作业
标记,但删除了打印
标记,因为系统只允许5个标记。切勿在头文件中使用名称空间
声明,这将迫使std
名称空间进入所有用户,这可能会导致代码中的名称冲突。几乎所有的问题都来自于试图使用指向向量的指针。如果你把向量直接存储在你的类中,那么大多数其他的东西都能正常工作@纳瓦兹:别给我-1,给OP的教授。我只是在演示如何做他显然被指派去做的事情。你们至少应该告诉他,当不需要的时候,使用指向向量的指针是个坏主意。如果你这样做,我就投赞成票!我以为我有,但现在我看到警告很弱。我加强了帖子中的警告。对于OP:我从不使用指向容器的指针,也从不使用指针容器。我建议你也不要这样做,除非你明白原因。正如你所看到的,我提到这一点只是因为在家庭作业中有这样的规定。我也不会做这样的事。
void insertAtFront(const NODETYPE& node) { vList->push_front(node); }