函数摸板问题!

tjj5203 2008-04-08 01:58:35
template<typename T>
bool f(vector<T> v1,vector<T> v2)
{
vector<T>::iterator iter1=v1.begin();
vector<T>::iterator iter2=v2.begin();
while(iter1!=v1.end()||iter2!=v2.end())
{
if(*iter1!=*iter2)return false;
++iter1;
++iter2;
}
return true;
}
想要一个函数模板,参数是容器!怎么写,我上面的写法不行??
...全文
185 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallening 2008-04-08
  • 打赏
  • 举报
回复
[Code=C/C++]
#include <iostream>
#include <vector>
using namespace std;

template <typename T>
bool f( const vector <T>& v1, const vector <T>& v2 )
{
const unsigned int size1 = v1.size();
const unsigned int size2 = v2.size();

if ( size1 != size2 )
return false;

for ( unsigned int i = 0; i < size1; ++i )
{
if ( v1[i] != v2[i] )
return false;
}

return true;
}

int main() {

int a1[] = {1, 2, 3, 4, 5, 6};

vector<int> v1(a1, a1 + 4);
vector<int> v2(a1, a1 + 4);
vector<int> v3(a1, a1 + 3);

if (f(v1, v2)) {
cout<<"v1 = v2"<<endl;
} else {
cout<<"v1 != v2"<<endl;
}

if (f(v1, v3)) {
cout<<"v1 = v3"<<endl;
} else {
cout<<"v1 != v3"<<endl;
}
return 0;
}

[/Code]

引用
$g++ -o ss ss.cc -Wall
$ ./ss
v1 = v2
v1 != v3
qmm161 2008-04-08
  • 打赏
  • 举报
回复
已经定死了,就是 vector 还。。
tjj5203 2008-04-08
  • 打赏
  • 举报
回复
DEVCPP编译通不过,VS2005过了,奇怪!
taodm 2008-04-08
  • 打赏
  • 举报
回复
那你就说得更明白些,这样可以节约别人的时间。
你还应该列出你的编译器和编译错误。
星羽 2008-04-08
  • 打赏
  • 举报
回复

#include "iostream"
#include "vector"
using namespace std;

template <typename T>
bool f(vector <T> v1,vector <T> v2)
{
vector <T>::iterator iter1=v1.begin();
vector <T>::iterator iter2=v2.begin();
while(iter1!=v1.end() || iter2!=v2.end())
{
if(*iter1!=*iter2)
return false;
++iter1;
++iter2;
}
return true;
}

int main() {

int a1[] = {1, 2, 3, 4};
int a2[] = {3, 4, 5, 6};

vector<int> v1(a1, a1 + 4);
vector<int> v2(a2, a2 + 4);

if (f(v1, v2)) {
cout<<"same"<<endl;
} else {
cout<<"Different"<<endl;
}

return 0;
}
cx36001390 2008-04-08
  • 打赏
  • 举报
回复
while(iter1!=v1.end() ¦ ¦iter2!=v2.end()) 的|| 换成&&

不然下面的 *iter1 != *iter2 不安全.

另外. 模板 T 要支持运算符操作.
tjj5203 2008-04-08
  • 打赏
  • 举报
回复
to 1楼,我是编译了不行才来问的!!
ttkk_2007 2008-04-08
  • 打赏
  • 举报
回复
template <typename T>
bool f(vector <T> v1,vector <T> v2)
{
vector <T>::iterator iter1=v1.begin();
vector <T>::iterator iter2=v2.begin();
while(iter1!=v1.end() ¦ ¦iter2!=v2.end())
{
if(*iter1!=*iter2)return false;
++iter1;
++iter2;
}
return true;
}
========================
可以,但是你把容器都定死了,你可以这样


template <typename Container>
bool f(Container v1,Container v2)
{
Container::iterator iter1=v1.begin();
Container::iterator iter2=v2.begin();
while(iter1!=v1.end() ¦ ¦iter2!=v2.end())
{
if(*iter1!=*iter2)return false;
++iter1;
++iter2;
}
return true;
}

pomelowu 2008-04-08
  • 打赏
  • 举报
回复
#include <vector>
using namespace std;

template <typename T>
bool f(vector <T> v1,vector <T> v2)
{
vector <T>::iterator iter1=v1.begin();
vector <T>::iterator iter2=v2.begin();
while(iter1!=v1.end() && iter2!=v2.end())
{
if(*iter1!=*iter2)return false;
++iter1;
++iter2;
}
return true;
}
taodm 2008-04-08
  • 打赏
  • 举报
回复
行不行的问题,自己编译一下就知道了。
你至少编译过自己的代码再来吧。

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧