我正在尋找理想的方式對一個Vector(刪除,添加)工作,但也能夠使元素之間的比較C++操作元件
財產以後喜歡這樣的:
[first]...[i-1][i][i+1]...[j]...[last] <-vector
如果條件在比較會見我&Ĵ然後執行下列操作:
[first]...[X][X][X][i*]...[j]...[last] <-vector
,其中X是一個刪除的元素(在我們的情況下,I-1,I,I + 1)和i *是取代eleme NT。 現在我知道我和j之間的距離是2.
據我所知(新的C++),有2種方式來處理這個。要麼使用矢量的直接方法(myVec.at(i).func()>myVec.at(j).func()
),但看起來你是有限的,因爲funcs像擦除&插入取決於一個迭代器。
另一種方法是使用迭代器,但比較(i & j)似乎涉及向量上的大量移動。例如,比較i和j(要求我將迭代器移動到j?,假設我不想要另一個迭代器),並刪除3個元素,需要移回到i-1來拉取元素等。
我猜你混,但它看起來可怕:
if(distance(myVec->begin(),it)+2<myVec->size() || ((Operation*) (*it))->Precedence() >= ((Operation*) myVec->at(distance(myVec->begin(),it)+2))->Precedence());
上面的代碼是例如一個簡單的,如果說第一次檢查是j是向量的範圍內,如果沒有比較i和j(我與迭代器,j與std :: distance)。
是「J」後的下一個可能發生或有一些復發? – Surt
向量迭代器構造起來非常便宜,因爲用於向量的內存保證是連續的,所以它基本上是一個指針加法。如果你想刪除元素'我',你可以'myVec.erase(myVec.begin()+ i);'。 –