请问下面的程序哪里有问题 ?

guyanhun 2005-08-26 09:57:23
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <stdlib.h>
#include <ctime>
using namespace std;

template <class T>
void arrayinsert(T a[],T collection[],int size)
{
for(int i=0;i<size;i++)
a[i]=collection[i];
}
template <class T>
void vectorinstert( vector <T>* a,T *collection,int size)
{
for(int i=0;i<size;i++)
a->push_back(collection[i]);
}
template <class T>
void listinsert(list <T>* a,T *collection,int size)
{
for(int i=0;i<size;i++)
a->push_back(collection[i]);
}
template <class T>
void multisetinsert(multiset <T>* a,T *collection,int size)
{
for(int i=0;i<size;i++)
a->insert(collection[i]);
}
/*int *getIntData(int size)
{
int *data=new int [size];
generate(&data[0],&data[size],rand);
return data;
}*/
template <class T>
void getdata(T *data, int size)
{
srand(unsigned (0));
for(int i=0;i<size;i++)
data[i]=rand()%100;
}
void costtime()
{
time_t start,end;
time(&start);
// ...
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
}

int main()
{

int b[1000000],collection[1000000];
getdata(collection,1000000);
time_t start,end;
time(&start);
arrayinsert(b,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
vector <int>a[1000000];
time(&start);
vectorinstert(a,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
list <int>c[1000000];
time(&start);
listinsert(c,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
multiset <int>d[1000000];
time(&start);
multisetinsert(d,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
return 0;
}
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhuahai 2005-08-26
  • 打赏
  • 举报
回复
这么快就结了?
你的问题在于vector<int> a[1000000];
你的函数只是把他当作一个vector来用,却声明了一个有1000000个vector的数组!!!
造成stack overflow!
zhouhuahai 2005-08-26
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <stdlib.h>
#include <ctime>
using namespace std;

template <class T>
void arrayinsert(T a[],T collection[],int size)
{
for(int i=0;i<size;i++)
a[i]=collection[i];
}
template <class T>
void vectorinstert( vector <T> a,T *collection,int size)
{
for(int i=0;i<size;i++)
a.push_back(collection[i]);
}
template <class T>
void listinsert(list <T> a,T *collection,int size)
{
for(int i=0;i<size;i++)
a.push_back(collection[i]);
}
template <class T>
void multisetinsert(multiset <T> a,T *collection,int size)
{
for(int i=0;i<size;i++)
a.insert(collection[i]);
}
/*int *getIntData(int size)
{
int *data=new int [size];
generate(&data[0],&data[size],rand);
return data;
}*/
template <class T>
void getdata(T *data, int size)
{
srand(unsigned (0));
for(int i=0;i<size;i++)
data[i]=rand()%100;
}
void costtime()
{
time_t start,end;
time(&start);
// ...
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
}

int main()
{

//int b[1000000],collection[1000000];
int *b = new int[1000000];
int *collection = new int [1000000];
if(b == NULL || collection == NULL)
{
cout<<"overflow"<<endl;
exit(1);
}
getdata(collection,1000000);
time_t start,end;
time(&start);
arrayinsert(b,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
vector <int>a;
time(&start);
vectorinstert(a,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
list <int>c;
time(&start);
listinsert(c,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
multiset <int>d;
time(&start);
multisetinsert(d,collection,1000000);
time(&end);
cout<<"costing time "<<(end-start)*CLOCKS_PER_SEC<<"ms..."<<endl;
system("pause");
return 0;
}
guyanhun 2005-08-26
  • 打赏
  • 举报
回复
程序运行就出错了,看来是stack overflow 了.
改小了数字就行了.
junguo 2005-08-26
  • 打赏
  • 举报
回复
堆栈溢出啊!你的数组分配的也太大了,这样的情况应该通过操作系统提供的虚拟内存来解决!
zhouhuahai 2005-08-26
  • 打赏
  • 举报
回复
int b[1000000],collection[1000000];

stack overflow,你不用数组,改用指针试试.
jixingzhong 2005-08-26
  • 打赏
  • 举报
回复
vector <int>a[1000000]; .......
jixingzhong 2005-08-26
  • 打赏
  • 举报
回复
你是什么问题也不说下 我这里没有编译器啊~

郁闷 在网吧
guyanhun 2005-08-26
  • 打赏
  • 举报
回复
谢谢...

64,439

社区成员

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

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