# include & ltiostream & gt
# include & lt算法& gt
# include & ltvector & gt
使用命名空間std
int I = 0;
模板& lttypename T & gt
無效打印(矢量& ltT & gt數字)
{
用於(T編號:數字)
cout & lt& lt號碼& lt& lt",";//為方便起見,去掉結尾後的最後壹個逗號。
cout & lt& ltendl
}
模板& lttypename T & gt
void shuffleEO(vector & lt;T & gt& ampnumbers,int index) // shuffle不包括1
{
int count = numbers . size();// vector.size(),返回向量元素的個數。
if(index & gt;= count)返回;?
向量& ltT & gt溫度;
for(I = 0;我& lt指數;i++)?
temp . push _ back(numbers . at(I));// vector.push_back(),在vector的末尾添加壹個元素。
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++)
temp2.push_back(temp.at(i))。//首先將index之前的元素添加到temp2中。
temp 2 . push _ back(numbers . at(index));//將索引添加到temp2。
for (i =索引;我& ltcount-1;i++)
temp2.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++)
{
shuffleEO(測試,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++)
{
shuffleEO(測試,4);
打印(測試);
}
返回0;
}
輸出結果: