返回信息流☆─────────────────────────────────────☆
nplus (nPlus) 于 (Tue Aug 5 14:44:26 2008) 提到:
我用模板写了一个容器...
再写迭代器的时候(与之分离,通过从容器传递来的指针初始化)
(迭代器储存一个内容指针的数组,并对这个数组实现迭代操作)
由于迭代器本身并不是由模板的参数初始化的
但初始化(构造)时必须要用含有模本参数的容器引用进行
我是了n种方法不管是把这个迭代器(class)放在模板里或者移除模板都无法通过
不知道各位大侠有什么办法能救救小弟...谢谢
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Tue Aug 5 17:49:56 2008) 提到:
用现有的容器呗,都已经那么强大了。
话说,迭代器不是对于指针的类封装么?怎么迭代器里面还会有数组?
小白飘过……
☆─────────────────────────────────────☆
taps (水龙头) 于 (Tue Aug 5 18:24:42 2008) 提到:
为什么应该是其它原因吧,这肯定是可以的啊。一般是用容器的成员函数来初始化这个Iterator对象,vector<int>::iterator it = vec.begin();这个函数的返回值是Iterator类型的,不是“容器的引用进行初始化”吧。另外迭代器一般也只保存某个地址,以及一些运算符的重载,不会“储存一个内容指针的数组”吧
【 在 nplus 的大作中提到: 】
: 我用模板写了一个容器...
: 再写迭代器的时候(与之分离,通过从容器传递来的指针初始化)
: (迭代器储存一个内容指针的数组,并对这个数组实现迭代操作)
: ...................
☆─────────────────────────────────────☆
hmily821224 (笨笨猫) 于 (Wed Aug 6 01:01:20 2008) 提到:
你好像太急着发帖了,语句有些不通顺。
能说清楚些么?
【 在 nplus 的大作中提到: 】
: 我用模板写了一个容器...
: 再写迭代器的时候(与之分离,通过从容器传递来的指针初始化)
: (迭代器储存一个内容指针的数组,并对这个数组实现迭代操作)
: ...................
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 12:01:37 2008) 提到:
我的意思是
我现在着手的只是一个算法和数据的实践...
跟STL没多大关系
现在遇到的困难是
我有这样一个设想
容器用链表实现(已经完工)
同时存在一个单独的iterator class
以这样的方式声明和初始化iterator it(container XX)
本身和容器类通过friend或者内部的接口交换数据
初始化迭代器时容器传递其链表所有储存内容的指针
在iterator内存在私有成员为内容指针的数组
iterator通过对该数组的操作进行各种算法迭代
问题是
template<class Ty>
class container
{...}
但是编译器不通过
template<class Ty>
class iterator
{...}
因为它的数据成员是一个常量
但是初始化列表中不能体现
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 12:05:16 2008) 提到:
迭代器只是一种操作对象的统称...
和怎么实现没有关系
能执行迭代操作的就叫迭代器了
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Wed Aug 6 14:20:29 2008) 提到:
好吧,姑且同意你说的“能实现迭代操作的就叫迭代器了”……
反正这个和STL已有的定义不一样
=。=
报了什么错,你不贴代码,不给错误信息,没有人知道咋回事。
呵呵
☆─────────────────────────────────────☆
hmily821224 (笨笨猫) 于 (Wed Aug 6 15:11:30 2008) 提到:
但是编译器不通过
template<class Ty>
class iterator
{...}
因为它的数据成员是一个常量
但是初始化列表中不能体现
这句话又是什么意思?
☆─────────────────────────────────────☆
hmily821224 (笨笨猫) 于 (Wed Aug 6 15:14:59 2008) 提到:
你是不是哪个地方不小心出了“笔误”?
iterator的构造函数应该这样写,是不是这地方弄错了?
template<class Ty>
iterator {
public:
iterator (Container<Ty> c&);
}
【 在 nplus 的大作中提到: 】
: 我的意思是
: 我现在着手的只是一个算法和数据的实践...
: 跟STL没多大关系
: ...................
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 16:25:14 2008) 提到:
没错的 我就是那么写的
(container<Ty>& pubContainer);
就连
container<Ty> pub都试过了
意思就是
用了template它告诉你iterator is declared as a non-class template
不用template它告诉不知道Ty是什么
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 16:27:55 2008) 提到:
【 在 ericyosho 的大作中提到: 】
: 好吧,姑且同意你说的“能实现迭代操作的就叫迭代器了”……
: 反正这个和STL已有的定义不一样
: =。=
: ...................
呵呵...谢谢你的提醒...但是容我争辩一句(请不要放在心上)
STL没有定义什么是迭代器...只实现了迭代器...
打个比方...可能在中国...说到饭我们就会想到米饭...但在西方想到的是面包
但是实际上饭只是对一些吃的东西的总称...
米饭只是在中国约定俗成的规则...就像stl里迭代器的实现方法一样
包涵一下...我有点钻牛角尖
☆─────────────────────────────────────☆
windam (棒棒糖) 于 (Wed Aug 6 18:36:11 2008) 提到:
贴代码吧
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 19:03:58 2008) 提到:
我手写好了
template<class Ty>
class vector
{
public:
...
friend class iterator;//这只是一种想法...不能这样交换数据的话可以写个函数;
private:
int sum;
Ty content;
int num;
Ty* index(int pubNum);//提供链表内数据指针
...
};
template<class Ty>
class iterator
{
public:
iterator(vector<Ty>& pubVector)
{
pointer=new Ty*[pubVector.sum]
for(int i=1;i<=pubVector.sum;i++)
{
为通过pubVector.index(i)为pointer赋值
};
};
...
private:
Ty** pointer;
};
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 19:09:07 2008) 提到:
赋值比较麻烦我就不写了
用这样一个思想
#include "iostream"
using namespace std;
int main(void)
{
int** pointer=new int*[5];
for(int i=0;i<5;i++)
{
pointer[i]=&i;
cout<<*pointer[i]<<endl;
};
return 0;
};
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Wed Aug 6 19:23:07 2008) 提到:
我不知道你怎么弄的,我在gcc下面跑过,一点问题都没有,输出了
0
1
2
3
4
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Wed Aug 6 19:27:15 2008) 提到:
我提个小问题,你给的那个代码里面,main函数根本就没有用到上面定义的模板类啊。
不定义,也应该输出0,1,2,3,4
=。=
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 19:43:30 2008) 提到:
【 在 ericyosho 的大作中提到: 】
: 我提个小问题,你给的那个代码里面,main函数根本就没有用到上面定义的模板类啊。
: 不定义,也应该输出0,1,2,3,4
: =。=
囧一下...恐怕你没有看清楚
模板在上面
下面那段东西只是作为例子说明迭代器的初始化方法...
因为比较麻烦我就举了这个例子来代替
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 19:44:31 2008) 提到:
难道你想要全部的代码?几百行看起来很舒服?
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Wed Aug 6 20:35:10 2008) 提到:
几百行也比没有强啊
=.=
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 21:26:08 2008) 提到:
#ifndef CT_H
#define CT_H
#include"presets.h"
typedef unsigned long int ULI32;//A Typedef of unsigned long int;
/*The Foundation Template of Container*/
template<class Ty>
class CT
{
public:
CT(void):_tContent(0){};
virtual void _Debug()=0;
protected:
Ty _tContent;
};
/*Part End*/
/*A vector-like Container*/
namespace Vector
{
template<class Ty>
class vector:public CT<Ty>
{
public:
vector():__pNext(0),__pPrevious(0),__iSum(1),__iNum(1){};
vector(ULI32 pubNum);
vector(vector& pubVector);
void pushback(Ty pubContent);
void _Debug(void);
void del(ULI32 pubNum);
void insert(ULI32 pubNum,Ty pubContent);
void replace(Ty pubOriContent,Ty pubAftContent);
ULI32 counter(Ty pubContent);
Ty max(void);
Ty min(void);
Ty& operator [](ULI32 pubNum);
vector operator +(vector& pubVector);
friend class iterator;
protected:
vector* __pPrevious;
vector* __pNext;
ULI32 __iSum;
ULI32 __iNum;
vector& __Index(ULI32 priNum);
};
template<class Ty>
vector<Ty>::vector(ULI32 pubNum)
{
vector* priTemp=this;
__iSum=pubNum;
__iNum=1;
__pPrevious=0;
for(ULI32 i=1;i<pubNum;i++)
{
priTemp->__pNext=new vector;
(priTemp->__pNext)->__pPrevious=priTemp;
priTemp=priTemp->__pNext;
priTemp->__iSum=pubNum;
priTemp->__iNum=i+1;
priTemp->_tContent=0;
};
priTemp->__pNext=0;
};
template<class Ty>
vector<Ty>& vector<Ty>::__Index(ULI32 priNum)//This part is prepared for iterator;
{
vector* priTemp=this;
if(priNum>priTemp->__iSum||priNum<1)
{
_Error("Wrong range in indexing part!");
return *priTemp;
};
ULI32 priCurrentNum=priTemp->__iNum;
if(priNum>priCurrentNum)
{
for(ULI32 i=0;i<priNum-priCurrentNum;i++)
{
priTemp=priTemp->__pNext;
};
return *priTemp;
}
else
{
for(ULI32 i=0;i<priCurrentNum-priNum;i++)
{
priTemp=priTemp->__pPrevious;
};
return *priTemp;
};
};
template<class Ty>
void vector<Ty>::pushback(Ty pubContent)
{
ULI32 priCurrentNum=this->__iSum;
this->__Index(this->__iSum).__pNext=new vector;
(this->__Index(this->__iSum).__pNext)->__iNum=this->__Index(this->__iSum).__iSum+1;
(this->__Index(this->__iSum).__pNext)->__iSum=this->__Index(this->__iSum).__iSum+1;
(this->__Index(this->__iSum).__pNext)->__pNext=0;
(this->__Index(this->__iSum).__pNext)->__pPrevious=&(__Index(__iSum));
(this->__Index(this->__iSum).__pNext)->_tContent=pubContent;
for(ULI32 i=1;i<priCurrentNum+1;i++)
{
__Index(i).__iSum+=1;
};
};
template<class Ty>
void vector<Ty>::_Debug()
{
for(ULI32 i=1;i<=__iSum;i++)
{
std::cout<<__Index(i).__iNum<<' '<<__Index(i).__iSum<<' '<<__Index(i)._tContent<<' '<<__Index(i).__pPrevious<<' '<<&(__Index(i))<<' '<<__Index(i).__pNext<<std::endl;
};
};
template<class Ty>
vector<Ty>::vector(vector<Ty> &pubVector)
{
vector* priTemp=this;
priTemp->__pPrevious=0;
for(ULI32 i=1;i<pubVector.__iSum;i++)
{
priTemp->__iNum=i;
priTemp->__iSum=pubVector.__iSum;
priTemp->_tContent=(pubVector.__Index(i))._tContent;
priTemp->__pNext=new vector;
(priTemp->__pNext)->__pPrevious=priTemp;
priTemp=priTemp->__pNext;
};
priTemp->__iNum=pubVector.__iSum;
priTemp->__iSum=pubVector.__iSum;
priTemp->__pNext=0;
priTemp->_tContent=(pubVector.__Index(pubVector.__iSum))._tContent;
};
template<class Ty>
void vector<Ty>::del(ULI32 pubNum)//I feel so upset and perplexed about this part;
{
if(pubNum>__iSum||pubNum<2)
{
_Error("Wrong range in deleting part!!!");
return;
};
ULI32 priSum=this->__iSum;
for(ULI32 i=pubNum;i<priSum;i++)
{
__Index(i)._tContent=__Index(i+1)._tContent;
};
delete (__Index(priSum-1)).__pNext;
(__Index(priSum-1)).__pNext=0;
for(ULI32 i=1;i<priSum;i++)
{
(__Index(i)).__iSum-=1;
};
};
template<class Ty>
void vector<Ty>::insert(ULI32 pubNum, Ty pubContent)
{
if(pubNum>__iSum||pubNum<1)
{
_Error("Wrong range in inserting part!!!");
return;
};
pushback(__Index(__iSum)._tContent);
for(ULI32 i=__iSum;i>pubNum+1;i--)
{
__Index(i)._tContent=__Index(i-1)._tContent;
};
__Index(pubNum+1)._tContent=pubContent;
};
template<class Ty>
void vector<Ty>::replace(Ty pubOriContent, Ty pubAftContent)
{
if(pubOriContent==pubAftContent)
{
return;//R U Kidding???;
};
/*
*******************
The way which I think a little bit less efficiency.
Also the phenomenon presents in the parts above and below because my aim is just a play.
In this part I wanna set up a special sample.
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent==pubOriContent)
{
__Index(i)._tContent=pubAftContent;
};
};
*/
vector* priTemp=&__Index(1);//The ideal alogrithm;
for(ULI32 i=1;;i++)
{
if(priTemp->_tContent==pubOriContent)
{
priTemp->_tContent=pubAftContent;
};
if(priTemp->__pNext==0)
{
return;
};
priTemp=priTemp->__pNext;
};
};
template<class Ty>
ULI32 vector<Ty>::counter(Ty pubContent)
{
ULI32 priNum=0;
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent==pubContent)
{
++priNum;
};
};
return priNum;
};
template<class Ty>
Ty vector<Ty>::max(void)
{
Ty priContent(0);
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent>priContent)
{
priContent=__Index(i)._tContent;
};
}
return priContent;
};
template<class Ty>
Ty vector<Ty>::min(void)
{
Ty priContent=__Index(1)._tContent;
for(ULI32 i=2;i<=__iSum;i++)
{
if(__Index(i)._tContent<priContent)
{
priContent=__Index(i)._tContent;
};
}
return priContent;
};
template<class Ty>
Ty& vector<Ty>::operator [](ULI32 pubNum)
{
if(pubNum>__iSum||pubNum<1)
{
_Error("Wrong range in operator[]!!!");
return __Index(__iSum)._tContent;
};
return __Index(pubNum)._tContent;
};
template<class Ty>
vector<Ty> vector<Ty>::operator +(vector<Ty>& pubVector)
{
vector<Ty> priVector=*this;
for(ULI32 i=1;i<=pubVector.__iSum;i++)
{
priVector.pushback(pubVector.__Index(i)._tContent);
};
return priVector;
};
template<class Ty>
class iterator
{
public:
iterator(vector<Ty>& pubVector)
{
_pointer=new Ty*[pubVector.__iSum];
for(ULI32 i=0;i<pubVector.__iSum;i++)
{
_pointer[i]=&pubVector.__Index(i);
};
};
private:
Ty** _pointer;
};
};
/*Part End*/
#endif
如你所愿
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 21:26:50 2008) 提到:
#ifndef PRESETS_H
#define PRESETS_H
#include"iostream"
#include"fstream"
/*All functions which is not related with the container and its derivers are set up in this head file*/
/*Exception Part*/
//Now here is a sample in Win Console environment with STL;
template<class Ty>
void _Error(Ty _message)
{
std::ofstream exception("exception.log",std::ios::app);
std::cerr<<_message<<std::endl;
exception<<_message<<std::endl;
};
/*Part End*/
#endif
☆─────────────────────────────────────☆
ericyosho (ericyosho) 于 (Wed Aug 6 22:29:46 2008) 提到:
g++ -c 测试通过,可以编译出.o文件,没有任何告警或者错误提示。
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Wed Aug 6 23:03:53 2008) 提到:
vc08编译不通过...
☆─────────────────────────────────────☆
hmily821224 (笨笨猫) 于 (Thu Aug 7 00:31:28 2008) 提到:
问题应该出在这里:
你的Container里没有把友员类iterator申明成template,所以编译器报错说它不知道iterator到底是不是模板类。
参考解决方法:
template<class T> class iterator; // forward declaration
template<class T>
Container {
public:
...
friend class iterator<T>;
};
template<class T>
iterator {
...
};
另外,有位网友说在gcc下可以编译通过...
gcc下也应该不能通过。可能是因为你没有显示的实例化这个类,所以根本就没编译这段代码(而去编译别的代码了)。不信你写个main函数,里面实例化一个iteratro看看...
【 在 nplus 的大作中提到: 】
: #ifndef CT_H
: #define CT_H
: #include"presets.h"
: ...................
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Thu Aug 7 00:46:59 2008) 提到:
【 在 hmily821224 的大作中提到: 】
: 问题应该出在这里:
: 你的Container里没有把友员类iterator申明成template,所以编译器报错说它不知道iterator到底是不是模板类。
: 参考解决方法:
: ...................
谢谢 关于GC的是正解
但是在container里改成
iterator<Ty>
还是不行但思路已经对了
应该在container类之前申明iterator
改为friend iterator<Ty>
完整代码是这样的
#ifndef CT_H
#define CT_H
#include"presets.h"
typedef unsigned long int ULI32;//A Typedef of unsigned long int;
/*The Foundation Template of Container*/
template<class Ty>
class CT
{
public:
CT(void):_tContent(0){};
virtual void _Debug()=0;
protected:
Ty _tContent;
};
/*Part End*/
/*A vector-like Container*/
namespace Vector
{
template<class Ty>
class iterator;
template<class Ty>
class vector:public CT<Ty>
{
public:
vector():__pNext(0),__pPrevious(0),__iSum(1),__iNum(1){};
vector(ULI32 pubNum);
vector(vector& pubVector);
void pushback(Ty pubContent);
void _Debug(void);
void del(ULI32 pubNum);
void insert(ULI32 pubNum,Ty pubContent);
void replace(Ty pubOriContent,Ty pubAftContent);
ULI32 counter(Ty pubContent);
Ty max(void);
Ty min(void);
Ty& operator [](ULI32 pubNum);
vector operator +(vector& pubVector);
friend iterator<Ty>;
protected:
vector* __pPrevious;
vector* __pNext;
ULI32 __iSum;
ULI32 __iNum;
vector& __Index(ULI32 priNum);
};
template<class Ty>
vector<Ty>::vector(ULI32 pubNum)
{
vector* priTemp=this;
__iSum=pubNum;
__iNum=1;
__pPrevious=0;
for(ULI32 i=1;i<pubNum;i++)
{
priTemp->__pNext=new vector;
(priTemp->__pNext)->__pPrevious=priTemp;
priTemp=priTemp->__pNext;
priTemp->__iSum=pubNum;
priTemp->__iNum=i+1;
priTemp->_tContent=0;
};
priTemp->__pNext=0;
};
template<class Ty>
vector<Ty>& vector<Ty>::__Index(ULI32 priNum)//This part is prepared for iterator;
{
vector* priTemp=this;
if(priNum>priTemp->__iSum||priNum<1)
{
_Error("Wrong range in indexing part!");
return *priTemp;
};
ULI32 priCurrentNum=priTemp->__iNum;
if(priNum>priCurrentNum)
{
for(ULI32 i=0;i<priNum-priCurrentNum;i++)
{
priTemp=priTemp->__pNext;
};
return *priTemp;
}
else
{
for(ULI32 i=0;i<priCurrentNum-priNum;i++)
{
priTemp=priTemp->__pPrevious;
};
return *priTemp;
};
};
template<class Ty>
void vector<Ty>::pushback(Ty pubContent)
{
ULI32 priCurrentNum=this->__iSum;
this->__Index(this->__iSum).__pNext=new vector;
(this->__Index(this->__iSum).__pNext)->__iNum=this->__Index(this->__iSum).__iSum+1;
(this->__Index(this->__iSum).__pNext)->__iSum=this->__Index(this->__iSum).__iSum+1;
(this->__Index(this->__iSum).__pNext)->__pNext=0;
(this->__Index(this->__iSum).__pNext)->__pPrevious=&(__Index(__iSum));
(this->__Index(this->__iSum).__pNext)->_tContent=pubContent;
for(ULI32 i=1;i<priCurrentNum+1;i++)
{
__Index(i).__iSum+=1;
};
};
template<class Ty>
void vector<Ty>::_Debug()
{
for(ULI32 i=1;i<=__iSum;i++)
{
std::cout<<__Index(i).__iNum<<' '<<__Index(i).__iSum<<' '<<__Index(i)._tContent<<' '<<__Index(i).__pPrevious<<' '<<&(__Index(i))<<' '<<__Index(i).__pNext<<std::endl;
};
};
template<class Ty>
vector<Ty>::vector(vector<Ty> &pubVector)
{
vector* priTemp=this;
priTemp->__pPrevious=0;
for(ULI32 i=1;i<pubVector.__iSum;i++)
{
priTemp->__iNum=i;
priTemp->__iSum=pubVector.__iSum;
priTemp->_tContent=(pubVector.__Index(i))._tContent;
priTemp->__pNext=new vector;
(priTemp->__pNext)->__pPrevious=priTemp;
priTemp=priTemp->__pNext;
};
priTemp->__iNum=pubVector.__iSum;
priTemp->__iSum=pubVector.__iSum;
priTemp->__pNext=0;
priTemp->_tContent=(pubVector.__Index(pubVector.__iSum))._tContent;
};
template<class Ty>
void vector<Ty>::del(ULI32 pubNum)//I feel so upset and perplexed about this part;
{
if(pubNum>__iSum||pubNum<2)
{
_Error("Wrong range in deleting part!!!");
return;
};
ULI32 priSum=this->__iSum;
for(ULI32 i=pubNum;i<priSum;i++)
{
__Index(i)._tContent=__Index(i+1)._tContent;
};
delete (__Index(priSum-1)).__pNext;
(__Index(priSum-1)).__pNext=0;
for(ULI32 i=1;i<priSum;i++)
{
(__Index(i)).__iSum-=1;
};
};
template<class Ty>
void vector<Ty>::insert(ULI32 pubNum, Ty pubContent)
{
if(pubNum>__iSum||pubNum<1)
{
_Error("Wrong range in inserting part!!!");
return;
};
pushback(__Index(__iSum)._tContent);
for(ULI32 i=__iSum;i>pubNum+1;i--)
{
__Index(i)._tContent=__Index(i-1)._tContent;
};
__Index(pubNum+1)._tContent=pubContent;
};
template<class Ty>
void vector<Ty>::replace(Ty pubOriContent, Ty pubAftContent)
{
if(pubOriContent==pubAftContent)
{
return;//R U Kidding???;
};
/*
*******************
The way which I think a little bit less efficiency.
Also the phenomenon presents in the parts above and below because my aim is just a play.
In this part I wanna set up a special sample.
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent==pubOriContent)
{
__Index(i)._tContent=pubAftContent;
};
};
*/
vector* priTemp=&__Index(1);//The ideal alogrithm;
for(ULI32 i=1;;i++)
{
if(priTemp->_tContent==pubOriContent)
{
priTemp->_tContent=pubAftContent;
};
if(priTemp->__pNext==0)
{
return;
};
priTemp=priTemp->__pNext;
};
};
template<class Ty>
ULI32 vector<Ty>::counter(Ty pubContent)
{
ULI32 priNum=0;
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent==pubContent)
{
++priNum;
};
};
return priNum;
};
template<class Ty>
Ty vector<Ty>::max(void)
{
Ty priContent(0);
for(ULI32 i=1;i<=__iSum;i++)
{
if(__Index(i)._tContent>priContent)
{
priContent=__Index(i)._tContent;
};
}
return priContent;
};
template<class Ty>
Ty vector<Ty>::min(void)
{
Ty priContent=__Index(1)._tContent;
for(ULI32 i=2;i<=__iSum;i++)
{
if(__Index(i)._tContent<priContent)
{
priContent=__Index(i)._tContent;
};
}
return priContent;
};
template<class Ty>
Ty& vector<Ty>::operator [](ULI32 pubNum)
{
if(pubNum>__iSum||pubNum<1)
{
_Error("Wrong range in operator[]!!!");
return __Index(__iSum)._tContent;
};
return __Index(pubNum)._tContent;
};
template<class Ty>
vector<Ty> vector<Ty>::operator +(vector<Ty>& pubVector)
{
vector<Ty> priVector=*this;
for(ULI32 i=1;i<=pubVector.__iSum;i++)
{
priVector.pushback(pubVector.__Index(i)._tContent);
};
return priVector;
};
template<class Ty>
class iterator
{
public:
iterator(vector<Ty>& pubVector)
{
_pointer=new Ty*[pubVector.__iSum];
for(ULI32 i=0;i<pubVector.__iSum;i++)
{
_pointer[i]=&pubVector[i+1];
};
};
private:
Ty** _pointer;
};
};
/*Part End*/
#endif
☆─────────────────────────────────────☆
nplus (nPlus) 于 (Thu Aug 7 00:53:30 2008) 提到:
再次感谢hmily821224学长
☆─────────────────────────────────────☆
hmily821224 (笨笨猫) 于 (Thu Aug 7 01:05:29 2008) 提到:
不客气:)当年我也是经常为这种看似简单又不可忽视的问题所困扰:)
【 在 nplus 的大作中提到: 】
: 再次感谢hmily821224学长
这是一条镜像帖。来源:北邮人论坛 / cpp / #45132同步于 2010/10/22
CPP机器人发帖
[合集] 请教...有关模板的
shenlei
2010/10/22镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。