我想擦除deque的元素。當你有一個包含結構的雙端隊列並且你想從後到前打印這些元素,但是你不想打印具有相同結構元素的元素時,你如何做呢?擦除Deque容器的元素
我有這樣的結構:
struct New_Array {
array<array<int,4>,4> mytable;
int h;
};
雙端隊列充滿了從前面的過程元素。 您想要打印所有位於雙側的元素,但您打印的每個表格必須具有唯一的「h」。只有您找到的具有特定「h」的第一張表必須打印,其他具有相同「h」的表不應打印。我認爲這也可以用「查找」功能來實現。
我們將從deque後面開始找到的「h」值將爲0,並且它將增加其對deque前面的值。
我已經試過這樣:
void Find_Solution_Path(deque<New_Array> Mydeque)
{
while(Mydeque.size()>0)
{
New_Array y=Mydeque.back();
PrintBoard(y); //this is a function that prints the 4x4 array.
Mydeque.pop_back();
for(unsigned int i=0; i<Mydeque.size(); i++)
{
New_Array xxx=Mydeque[i];
if(xxx.h==y.h)
{
Mydeque.erase(Mydeque[i]);
}
}
}
}
我認爲你在for循環中有一個索引問題:當你刪除第i個元素時,你增加了i,但是所有下列元素的索引已經移動了1. –
@EitanT The deque不是從0開始的?它從1開始? –
不,我的意思是以下內容:假設你有一個元素隊列{10,20,30,40},並且你在'i = 1'(第二個元素)擦除元素。你的隊列現在是{10,30,40}。在'i ++'之後,你得到'i = 2',這意味着要評估的下一個元素是40元素30被跳過。 –