szukanie odpowieniego kontenera STL

0

Mam pytanie czy istnieje jakiś kontener STL, który przy usuwaniu elementów (z srodka, lub poczatku) nie bedzie cofac pozostalych elementow, wpychajac sie na miejsce usunietego

np mamy elementy:

a b c d e f g h

usuwam np. element 'd'

i chcialbym otrzymac:

a b c - e f g h

gdzie ' - ' jest pustym miejscem.

Natomiast przy wstawianiu nowego obiektu, bedzie zapisywac na koncu tablicy a nie w miejsce usunietego elementu;)

Dzieki za pomoc;)

0

Napisz wrapper na vector.

0

najprościej http://ideone.com/XymlPr

a jak będziesz chciał usuwać więcej niż pierwszy znaleziony element to pętle aż find zwróci end;

edit:

nie wiem czemu nie chcesz realokować tego, dla vectora to pikuś, zastąp *it = 0; v.erase(it); i łatwo;

0

dzieki ;)

1

-na siłe-

#include <iostream>
#include <vector>
#include <algorithm>
#include <initializer_list>

using std::cout;
using std::endl;

template<class T, T empty_one>
struct vector : public std::vector<T>{
	typedef typename std::vector<T>::iterator iterator;
	typedef typename std::vector<T>::const_iterator const_iterator;
	
	vector(std::initializer_list<T> il) : std::vector<T>(il){}
	
	iterator erase(const T &item){
		for(auto &it : *this)
			if(it == item) 
				it = empty_one;
	}
};

int main(){
	vector<char, '-'> v = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
	
	for(auto item : v) 
		cout << item; 
	cout << endl;
	
	v.erase('d');
	
	for(auto item : v) 
		cout << item; 
	cout << endl;
	return 0;
}

output:

abcdefg
abc-efg

http://ideone.com/HuCFZn

0

szukanie odpowieniego kontenera STL

when in doubt, std::vector ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1