我正在嘗試解決與此類似的問題:Throwing cards away。我的問題唯一的變化是我不需要丟棄卡片的順序。我只想要剩下的最後一張牌。刪除並推回C++中的矢量元素
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main(void)
{
int n, i;
while ((scanf ("%d", &n) == 1) && n != 0)
{
vector<int> cards;
for (i = 1; i <= n; ++i)
{
cards.push_back(i);
}
while (cards.size() != 1)
{
cards.erase(cards.begin());
cards.push_back(cards.front());
}
printf ("%d\n", cards.at(1));
}
return 0;
}
這是我第一次使用vector
和所有相關的STL功能。我檢查了this並且它說erase
函數刪除了一個向量元素。所以while
循環應該繼續減小vector
的大小,直到變爲1
。但是我沒有得到一個輸出來運行這個。我認爲這是因爲無限循環,所以我嘗試在每次迭代中打印vector
的大小,並且看到僅縮小了一次。所以這導致了無限循環。但我不明白爲什麼它不會進一步減少。
不除第一元件和第二複製到盡頭? – simonc
是的,該關鍵字*複製*,不移動。所以第一個被刪除,它將向量大小減1,但複製再次將大小加1。 –
@IgorPopov是否有任何可以移動元素而不是複製它的STL函數? – reb94