當前位置:編程學習大全網 - 源碼下載 - 向量回推源代碼

向量回推源代碼

我在算法中使用了random_shuffle函數,它是隨機排序的。我的想法是用另壹個向量把不固定的元素拿出來隨機排序,然後把固定的元素還原得到重排後的向量:

# 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;

}

輸出結果:

  • 上一篇:錦鯉餵什麽長得快顏色好
  • 下一篇:想去重慶度假,不踩雷。
  • copyright 2024編程學習大全網