# include & ltiostream & gt
# include & lt算法& gt
# include & ltvector & gt
使用命名空間std
int I = 0;
模板& lt鍵入名稱T & gt
無效打印(矢量& ltT & gt數字)
{
用於(測試編號:數字)
cout & lt& lt號碼& lt& lt",";//為方便起見,刪除結尾後的最後壹個逗號。
cout & lt& ltendl
}
模板& lt鍵入名稱T & gt
void shuffleo(vector & lt;T & gt& ampnumbers,int index)//shuffle不包括1
{
int count = numbers . size();// vector.size(),返回向量元素的個數。
if(index & gt;= count)返回;?
向量& ltT & gttemp
for(I = 0;我& lt指數;i++)?
temp . push _ back(numbers . at(I));// vector.push_back(),在向量的末尾添加壹個元素。
for(I = index+1;我& lt數數;i++)
temp . push _ back(numbers . at(I));?//這裏的兩個for將原數組中除index以外的元素復制到temp中,並保持順序不變。
random _ shuffle(temp . begin()、temp . end());// random_shuffle()是算法中的標準庫函數,它有兩個重載版本,壹個有兩個參數,壹個有三個參數。雙參數版本接收兩個叠代器指針作為參數,前者指向序列的開頭,後者指向序列的結尾,random_shuffle將隨機重新排列兩個指針之間的元素。三參數版本接收壹個指定重排規則的額外參數,這不是很常見。這裏的vector.begin()指向vector的第壹個元素,vector.end()指向最後壹個元素之後的位置(註意不是最後壹個元素)。
向量& ltT & gttemp2
for(I = 0;我& lt指數;i++)
temp 2 . push _ back(temp . at(I);//首先將index之前的元素添加到temp2。
temp 2 . push _ back(numbers . at(index));//向temp2添加索引。
for(I = index;我& ltcount-1;i++)
temp 2 . push _ back(temp . at(I);//最後,將index之後的元素添加到temp2中。
numbers = temp2//這樣,索引位置保持不變,而其他元素已被隨機排序,temp2是最終結果。因為數字是通過引用傳遞的,所以這裏將temp2賦給數字。
}
int main(void)
{
向量& ltint & gt測試;
for(I = 0;我& lt10;i++)test . push _ back(I);
打印(測試);
cout & lt& lt“現在洗牌指數0:“& lt;& ltendl
for(int j = 0;j & lt15;j++)
{
舒芙蕾奧(測試,0);
打印(測試);
}
cout & lt& lt“現在洗牌指數4:“& lt;& ltendl
test . clear();// vector.clear()清空vector中的元素,相當於成為壹個空vector。
for(I = 0;我& lt10;i++)test . push _ back(I);
打印(測試);
for(int j = 0;j & lt15;j++)
{
舒芙蕾奧(測試,4);
打印(測試);
}
返回0;
}
輸出結果: