當前位置:編程學習大全網 - 源碼下載 - C++中vector函數保持其中壹個元素位置不變,其他的隨機排序?

C++中vector函數保持其中壹個元素位置不變,其他的隨機排序?

我利用了algorithm裏的random_shuffle函數,這個函數是隨機排序的。我的思路是用另壹個vector取出不要固定的元素做隨機排序,然後把固定元素還原得到重排後的vector:

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

int i = 0;

template<typename T>

void print(vector<T> numbers)

{

for (T number : numbers)

cout << number << ","; // 為了方便沒後去掉最後的逗號

cout << endl;

}

template<typename T>

void shuffleEO(vector<T> &numbers, int index) // shuffle excluding one

{

int count = numbers.size(); // vector.size(),返回vector元素個數

if (index >= count) return;?

vector<T> temp;

for (i = 0; i < index; i++)?

temp.push_back(numbers.at(i)); // vector.push_back(),添加壹個元素至vector的末尾

for (i = index+1; i < count; i++)

temp.push_back(numbers.at(i));? // 這裏的兩個for把原數組中除了index外的元素復制到了temp中,並且保持先後順序不變

random_shuffle(temp.begin(), temp.end()); // random_shuffle()是algorithm裏面的壹個標準庫函數,有兩個重載的版本,這裏用的是兩個參數的,還有壹個三個參數的。兩個參數的版本接收兩個叠代器指針作為參數,前者指向序列首,後者指向序列尾,random_shuffle會對在這兩個指針之間的元素隨機重排。三個參數的版本額外接收壹個指定重排規則的參數,不怎麽常用。這裏的vector.begin()指向vector第壹個元素,vector.end()指向最後壹個元素的後壹個位置(註意不是最後壹個元素)

vector<T> temp2;

for (i = 0; i < index; i++)

temp2.push_back(temp.at(i)); // 先把index前的元素加入temp2中

temp2.push_back(numbers.at(index)); // 把index加入temp2中

for (i = index; i < count-1; i++)

temp2.push_back(temp.at(i)); // 最後把index後的元素加入temp2中

numbers = temp2; // 這樣壹來index位置不變,而其它元素已經隨機排序,temp2就是最終的結果,因為按引用傳遞numbers,所以這裏把temp2賦值給numbers

}

int main(void)

{

vector<int> test;

for (i = 0; i < 10; i++) test.push_back(i);

print(test);

cout << "Now shuffle index 0:" << endl;

for (int j = 0; j < 15; j++)

{

shuffleEO(test, 0);

print(test);

}

cout << "Now shuffle index 4:" << endl;

test.clear(); // vector.clear()清空vector中的元素,相當於變為壹個空的vector

for (i = 0; i < 10; i++) test.push_back(i);

print(test);

for (int j = 0; j < 15; j++)

{

shuffleEO(test, 4);

print(test);

}

return 0;

}

輸出結果:

  • 上一篇:數控編程g代碼m代碼,所有的!詳細點!
  • 下一篇:手機手寫輸入法的手寫板設置
  • copyright 2024編程學習大全網