请看下面的例子 ptrdiff_t myrandom(ptrdiff_t i){return rand()%i;} ptrdiff_t (*p_myrandom)(ptrdiff_t)=myrandom;//此处定义一个函数指针,指向产生随机数的方法函数 template<typename T> void vrand(vector<T> &v,ptrdiff_t (*p_myrandom)(ptrdiff_t)) //这里定义一个模板函数,它可以把一个有序序列变成随机序列 { if(p_myrandom==NULL) { random_shuffle(v.begin(),v.end());//此处调用STL中的模板函数产生随机序列 } else { random_shuffle(v.begin(),v.end(),p_myrandom);//此处调用STL中的模板函数产生随机序列,并多一个参数,产生随机数的方法类 } } int vrandtest() { vector<char> vi; vector<char>::iterator vp; srand(unsigned(time(NULL))); //此处一定要,因为它重新产生一个随机种子,后面的随机序列才会改变,否则,每次产生的随机序列都是一样的 for(int i =0;i<10;i++) vi.push_back(i+'a'); for(vp=vi.begin();vp!=vi.end();++vp) cout << *vp <<