<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Suche passenden STL-Container]]></title><description><![CDATA[<p>hallo forum,</p>
<p>ich bin auf der suche nache einem STL container mit folgenden eigenschaften:<br />
-konstante größe (wie bei boost::array)<br />
-FIFO-Prinzip (à la std::deque glaub ich)<br />
-eigentlich bräuchte ich dann auch nur die methoden push und pop, wobei push false zurückgeben soll und das element verworfen wird, wenn die liste voll ist, anstatt es einfach reinzuschieben und das letzte element zu löschen.<br />
-außerdem kann es sein, dass auch mal eine element in der mitte gelöscht wird, und der rest dann &quot;aufrücken&quot; müsste.</p>
<p>gibt es für sowas schon einen fertigen STL-Container? hab mich auch schon selbst daran versucht, sah aber nicht so gut aus, wobei ich da auch noch eine frage habe: gibt es bei den STL algos oder bei den container auch eine funktion/methode bool has() oder bool exists(), die angibt ob das element schon vorhanden ist? hab mir das immer selbst gebastelt mit</p>
<pre><code class="language-cpp">bool has(const Tc&amp; container, const Te&amp; elem)
{
    return std::find(container.begin, container.end(), elem)!=container.end()
}
</code></pre>
<p>oder so ähnlich</p>
<p>vielen dank im voraus für eure bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188803/suche-passenden-stl-container</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 05:07:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188803.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Aug 2007 09:49:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 09:49:35 GMT]]></title><description><![CDATA[<p>hallo forum,</p>
<p>ich bin auf der suche nache einem STL container mit folgenden eigenschaften:<br />
-konstante größe (wie bei boost::array)<br />
-FIFO-Prinzip (à la std::deque glaub ich)<br />
-eigentlich bräuchte ich dann auch nur die methoden push und pop, wobei push false zurückgeben soll und das element verworfen wird, wenn die liste voll ist, anstatt es einfach reinzuschieben und das letzte element zu löschen.<br />
-außerdem kann es sein, dass auch mal eine element in der mitte gelöscht wird, und der rest dann &quot;aufrücken&quot; müsste.</p>
<p>gibt es für sowas schon einen fertigen STL-Container? hab mich auch schon selbst daran versucht, sah aber nicht so gut aus, wobei ich da auch noch eine frage habe: gibt es bei den STL algos oder bei den container auch eine funktion/methode bool has() oder bool exists(), die angibt ob das element schon vorhanden ist? hab mir das immer selbst gebastelt mit</p>
<pre><code class="language-cpp">bool has(const Tc&amp; container, const Te&amp; elem)
{
    return std::find(container.begin, container.end(), elem)!=container.end()
}
</code></pre>
<p>oder so ähnlich</p>
<p>vielen dank im voraus für eure bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338557</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sat, 04 Aug 2007 09:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 10:01:28 GMT]]></title><description><![CDATA[<p>Hmm spontan würde ich sagen, nimm n std::vector oder den angesprochenen std::deque ...<br />
Aber was meinst du mit konstanter Größe (sorry wenn ich mich lächerlich mache)?<br />
Das &quot;size&quot; immer gleich groß bleibt oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338558</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sat, 04 Aug 2007 10:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 10:05:55 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig verstanden habe will der OP, dass ein push() jedes mal fehlschlägt wenn die Queue eine bestimmte Größe überschreiten würde.</p>
<p>Ich denke vorgefertigt gibt es da nichts, ich würde das als Container-Adapter auf eine std::deque implementieren, allerdings würde ich beim push() eine Exception verwenden, wenn der Container &quot;voll&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338562</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sat, 04 Aug 2007 10:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 10:44:42 GMT]]></title><description><![CDATA[<p>Checker&amp;Murckser schrieb:</p>
<blockquote>
<p>Aber was meinst du mit konstanter Größe (sorry wenn ich mich lächerlich mache)?Das &quot;size&quot; immer gleich groß bleibt oder wie?</p>
</blockquote>
<p>also std::vector, und die andern vergrößern bei einem push_back den speicher ja immer, wenn der container voll ist. ich bräuchte eben einen container der als templateargument oder ctor-argument eine elemntanzahl nimmt und dann einmalig speicher allokiert, der in der größe nicht mehr verändert werden kann:</p>
<pre><code class="language-cpp">template&lt;class T, unsigned int N&gt;
Container()//oder

Container(unsigned int size)//ctor
</code></pre>
<p>außerdem ist es nicht so tragisch, wenn er voll ist, das element kann problemlos verworfen werden, eine exception würde da eher den programmablauf stören. hatte noch vergessen: jedes element darf nur einmal vorkommen. das hauptproblem ist aber, wenn ein element gelöscht wird, das sich nicht am rand, sondern in der mitte befindet. ich glaube aber fast ich versuch mich nochmal selbst an einer eigenen klasse und meld' mich dann nochmal wenn ich probleme damit habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338582</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sat, 04 Aug 2007 10:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 11:20:26 GMT]]></title><description><![CDATA[<p>Ich würde an deiner Stelle auch einen Container-Adapter verwenden (womöglich sogar auf der Basis von std::set&lt;&gt;), der bei jeder Einfüge-Operation eine Größenkontrolle durchführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338594</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 04 Aug 2007 11:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 11:28:16 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ich würde an deiner Stelle auch einen Container-Adapter verwenden (womöglich sogar auf der Basis von std::set&lt;&gt;), der bei jeder Einfüge-Operation eine Größenkontrolle durchführt.</p>
</blockquote>
<p>FIFO mit std::set&lt;&gt;?<br />
Wie stellst du dir das vor?</p>
<p>vielleicht eine Kombiantion aus std::deque und std::set im Zusammenspiel mit smart_ptr&lt;&gt; / weak_ptr&lt;&gt;, je nach größe der Queue wird das dann allerdings ganz schnell Memory-Lastig ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338600</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sat, 04 Aug 2007 11:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 11:59:02 GMT]]></title><description><![CDATA[<p>ok danke mal für die antworten... aber unabhängig davon welchen container ich nehme, redet ihr da von einer klasse die von einem container abgeleitet wird, oder die einen container als member verwaltet?</p>
<p>und wie stehts damit</p>
<blockquote>
<p>gibt es bei den STL algos oder bei den container auch eine funktion/methode bool has() oder bool exists(), die angibt ob das element schon vorhanden ist?</p>
</blockquote>
<p>@ darthdespotism: smart_ptr und weak_ptr kenn ich zwar, aber wie stellst du dir vor, sollen sie dort angewandt werden? verstehe ich nicht so ganz...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338627</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sat, 04 Aug 2007 11:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 12:13:15 GMT]]></title><description><![CDATA[<p>Eine Adapterklasse beinhaltet einen Container und du implementierst für den Adapter eigene Methoden, die den Container im Inneren bearbeiten, beispielsweise push_back und in die baust du dann deine gewünschten ÜBerprüfungen ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338633</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sat, 04 Aug 2007 12:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 13:19:30 GMT]]></title><description><![CDATA[<p>Von den std::container&lt;&gt; würde ich nicht ableiten, sondern diese als Member verwenden.</p>
<p>zu set&lt;&gt; + deque&lt;&gt;:</p>
<p>Set ist ideal um sicherzustellen, dass Elemente nur einmal vorkommen, deque für das FIFO.</p>
<p>Wenn man jetzt sowohl set&lt;&gt; als auch deque&lt;&gt; verwendet und im set&lt;&gt; dann Objekte lagert, die im d'tor das entsprechende Element aus der deque&lt;&gt; löschen ist das möglicherweise ein Beschläunigung. (Keine Ahnung ob das überhaupt vorteile bringt, CStolls vorschlag mit set&lt;&gt; hat mich darauf gebracht.</p>
<p>smart+ weak ptrs bringen da nichts. Da hab ich nicht weit genug gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338658</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sat, 04 Aug 2007 13:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 14:23:50 GMT]]></title><description><![CDATA[<p>also müsste ein element sowohl im set als auch in einer deque vorhanden sein? oder könntest du mal ein kurzes bsp. geben wie du dir das vorstellst. denn als basis hatte ich mir auch eher set vorgestellt, wobei da wieder das problem mit der priorität ist... theoretisch könnte ich den operator '&lt;' entsprechend überladen, bzw. map verwenden, wobei die priorität (in meinem fall wäre da die tageszeit möglich) als key verwendet wird... (is mir jetzt auch erst gerade eben eingefallen, würde sich aber sogar anbieten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338685</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sat, 04 Aug 2007 14:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 16:36:16 GMT]]></title><description><![CDATA[<p>Mir war grad laaaaangweilig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code class="language-cpp">// Für PODs gedacht, oder Objekt muss leeren Konstruktor haben
template&lt;class Cl&gt; class Bla
{
	public:
		Bla( int size )
		{
			this-&gt;size = size;
			data = new Cl [size];
			top = bottom = 0;
		}

		~Bla()
		{
			delete[] data;
		}

		void push( const Cl&amp; elem )
		{
			if ( bottom-top &gt;= size )
				throw 0; // whatever

			for ( int i=top; i&lt;bottom; ++i )
				if ( data[i%size] == elem )
					throw 0; // whatever

			data[(bottom++)%size] = elem;
		}

		Cl pop()
		{
			if ( top &gt;= bottom )
				throw 0; // whatever
			return data[(top++)%size];
		}

	private:
		int		size;
		int		top, bottom;
		Cl*		data;
};

// Nicht getestet, aber vielleicht funktionierts für alle anderen Klassen
template&lt;class Cl&gt; class Bla
{
	public:
		Bla( int size )
		{
			this-&gt;size = size;
			data = (Cl*) malloc( size * sizeof(Cl) );
			top = bottom = 0;
		}

		~Bla()
		{
			for ( int i=top; i&lt;bottom; ++i )
				data[i].~Cl();
			free( data );
		}

		void push( const Cl&amp; elem )
		{
			if ( bottom-top &gt;= size )
				throw 0; // whatever

			for ( int i=top; i&lt;bottom; ++i )
				if ( data[i%size] == elem )
					throw 0; // whatever

			new (&amp;data[(bottom++)%size]) Cl(elem);
		}

		Cl pop()
		{
			if ( top &gt;= bottom )
				throw 0; // whatever

			Cl ret = data[top%size];
			data[top%size].~Cl();
			++top;
			return ret;
		}

	private:
		int		size;
		int		top, bottom;
		Cl*		data;
};
</code></pre>
<p>Könnte aber sein, dass vor allem in der zweiten Variante irgendwo noch ein Fehlerchen drinsteckt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338729</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 04 Aug 2007 16:36:16 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 17:34:19 GMT]]></title><description><![CDATA[<p>ok vielen dank für das umfangreich beispiel. habe mich jetzt für einen adapter für std::map entschieden, mal schaun wie ich den code in die methoden einbringen kann. noch eine frage am rande: was sind PODs?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338747</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sat, 04 Aug 2007 17:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sat, 04 Aug 2007 18:13:46 GMT]]></title><description><![CDATA[<p>hulk_hogan schrieb:</p>
<blockquote>
<p>noch eine frage am rande: was sind PODs?</p>
</blockquote>
<p>Heißt soweit ich weiß &quot;Plain Old Data&quot;. Gemeint sind damit Typen wie &quot;int&quot;, &quot;double&quot;, &quot;char&quot;, usw. Die brauchen keinen Konstruktor oder Destruktor, deshalb braucht man sich da nicht um den Aufruf zu kümmern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Und wenn du den Adapter hast, kannst du ihn dann mal posten? Ich würd gern einfach nur mal interessehalber was gucken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338763</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 13:47:18 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Und wenn du den Adapter hast, kannst du ihn dann mal posten? Ich würd gern einfach nur mal interessehalber was gucken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Klar! aber es is nur eine Skizze (die sich noch nichteinmal vollständig kompilieren lässt) und an der auch nicht mehr weitergearbeitet wird (brauche doch einen container, der intern eine art list oder so ist, vielleicht auch std::list, und bevor jemand mecket ich kann mich wirklich nicht so richtig entscheiden). der abstand in dem die neuen elemente (tcp-endpoints) reinkommen, ist nämlich unterschiedlich und wenn ich pech habe kommt dann ein key (zeit in millisecs) unabsichtlich zweimal vor...</p>
<p>also hier mal die klasse mit fehler vom compiler... wär nett wenn mir jemand noch geschwind sagen könnte was da nicht stimmt</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;ctime&gt;

template&lt;class T, unsigned int N&gt;
class MyMap
{
public:
	typedef std::clock_t key_type;
	typedef typename T mapped_type;
	typedef std::map&lt;key_type, mapped_type&gt;::iterator iterator;
	typedef std::pair&lt;key_type, mapped_type&gt; value_type;

	MyMap()
		: m_size(N)
	{};	

	bool full() const { return m_data.size() &gt;= m_size; }

	bool push(const T&amp; elem)
	{
		if(full())
			return false;

		m_data[std::clock()]=elem;		
		return true;
	}

	mapped_type pop()
	{
		mapped_type tmp=m_data.begin()-&gt;second;
		m_data.erase(m_data.begin());
		return tmp;
	}

private:
	unsigned int m_size;
	std::map&lt;key_type, mapped_type&gt; m_data;
};
</code></pre>
<p>und zwar ist hier das problem, dass dem compiler beim iterator typedef irgentetwas nicht passt...</p>
<blockquote>
<p>1&gt;.\main.cpp(10) : warning C4346: 'std::map&lt;MyMap&lt;T,N&gt;::key_type,T&gt;::iterator': Abhängiger Name ist kein Typ<br />
1&gt; Präfix mit 'typename' zum Angeben eines Typs<br />
1&gt; .\main.cpp(38): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;MyMap&lt;T,N&gt;&quot;.<br />
1&gt;.\main.cpp(10) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'iterator'<br />
1&gt;.\main.cpp(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1339005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339005</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sun, 05 Aug 2007 13:47:18 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 17:42:54 GMT]]></title><description><![CDATA[<p>Sagt mal Leute, übersehe ich irgendwas? Die Anforderungen stehen doch alle im ersten Posting, wieso empfiehlt niemand, die Klasse boost::array entsprechend zu erweitern (Vererbung!) und dann an den Adapter std::queue zu übergeben?</p>
<p>Folgendes, ungetestet, sollte in etwa gehen:</p>
<pre><code class="language-cpp">template &lt;typename T, std::size_t N&gt;
class ring_buffer_base : public std::tr1::array&lt;T, N&gt; {
public:
    reference front() { return operator[](make_index(m_front)); }
    const_reference front() const { return operator[](make_index(m_front)); }
    reference back() { return operator[](make_index(m_back)); }
    const_reference back() const { return operator[](make_index(m_back)); }

    void push_back(value_type const&amp; x)
    {
        if (size() &lt; N)
            operator[make_index(m_back++)] = x;
    }

    void pop_front()
    {
        if (not empty())
            ++m_front;
    }

    size_type int size() const { return m_back - m_front - 1; }

    bool empty() const { return size() == 0; }

private:
    size_type m_front;
    size_type m_back;

protected:
    size_type make_index(size_type n) const { return n % size(); }
};
</code></pre>
<p>Hier läuft allerdings der Index davon … d.h. er wird immer größer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339109</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 05 Aug 2007 17:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 19:57:47 GMT]]></title><description><![CDATA[<p>verstehe den bezug zu boost::array und std::deque aber nicht so ganz bei deinem bsp. auch std::tr1::array kenne ich nicht (ist das das gleiche?). und nur nochmal auf mein beispiel zurückzukommen: ist irgendetwas nicht korrekt an dem typedef ?</p>
<pre><code class="language-cpp">typedef std::map&lt;key_type, mapped_type&gt;::iterator iterator;
</code></pre>
<p>(bzw. an den vorangegangenen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339182</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sun, 05 Aug 2007 19:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 20:13:14 GMT]]></title><description><![CDATA[<p>hulk_hogan schrieb:</p>
<blockquote>
<p>verstehe den bezug zu boost::array und std::deque aber nicht so ganz bei deinem bsp. auch std::tr1::array kenne ich nicht (ist das das gleiche?).</p>
</blockquote>
<p>Also, 'std::tr1::array' und 'boost::array' sind, für den Sinn dieser Diskussion, dasselbe. Der Bezug ist folgender:</p>
<p>Du hast in Deinem ersten Posting eine Schnittstellen-Anforderung beschrieben, die von dem Adapter 'std::queue' abgedeckt wird. D.h. im Prinzip reicht es, wenn Du diesen Adapter benutzt, und all deine Probleme sind gelöst. Na ja, bis auf eines: die feste Größe. Die wird von 'boost:array' (oder eben 'std::tr1::array') geliefert. Leider ist <code>array</code> von der Schnittstelle her nicht geeignet, um mit 'std::queue' verwendet zu werden. Und da kommt meine Klasse ins Spiel, sie stellt nämlich gewissermaßen ein Bindeglied dar. Jetzt solltest Du meine Klasse adaptieren können, indem Du folgenden Code verwendest:</p>
<pre><code class="language-cpp">template &lt;typename T, std::size_t N&gt;
struct ring_buffer {
    typedef std::queue&lt;T, ring_buffer_base&lt;T, N&gt; &gt; type;
};

// Instanzierung:
ring_buffer&lt;int, 10&gt;::type my_buffer;

for (int i = 0; i &lt; 10; ++i)
    my_buffer.push(i);

while (not my_buffer.empty()) {
    std::cout &lt;&lt; my_buffer.front() &lt;&lt; std::endl;
    my_buffer.pop();
}
</code></pre>
<p>Wie vorher: ungetestet.</p>
<p>Zu Deinem anderen Problem: Da fehlt wohl ein 'typename' (das kannst Du dafür bei Deinem <code>typedef typename T mapped_type;</code> streichen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339188</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 05 Aug 2007 20:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 20:26:39 GMT]]></title><description><![CDATA[<p>ok vielen dank, werd ich ausporbiern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339195</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Sun, 05 Aug 2007 20:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 22:20:29 GMT]]></title><description><![CDATA[<p>Könnt ihr mir vllt sagen, wieso ihr die Indizes so seltsam anspricht? Ist jetzt schon zu spät um meine Gehrinzellen zu aktivieren:</p>
<pre><code class="language-cpp">data[(bottom++)%size] = elem;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339257</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 22:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Sun, 05 Aug 2007 23:32:14 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Könnt ihr mir vllt sagen, wieso ihr die Indizes so seltsam anspricht? Ist jetzt schon zu spät um meine Gehrinzellen zu aktivieren:</p>
<pre><code class="language-cpp">data[(bottom++)%size] = elem;
</code></pre>
</blockquote>
<p>Ich hab mir da auch ein wenig das Hirn verbogen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Das soll ja quasi ein Array mit First-In-&gt;First-Out Funktionalität (ich weiß, dass du weißt, was FIFO heißt, aber ich finde so liest es sich besser :)) sein. Pusht man den/das Array voll (alle Elemente werden hintereinander abgelegt, von links nach rechts) und popt ein Element (Index 0), müsste der nächste Push ja über das Ende hinausschreiben. Stattdessen wrappt man, so dass der Push in den Index 0 schreibt. &quot;Bottom&quot; und &quot;Top&quot; werden so weitergeführt, als ob der/das Array eine unendliche Größe hätte - um einen &quot;realen&quot; Index im Array zu erreichen, mod'et man einfach mit der Größe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339281</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 05 Aug 2007 23:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Mon, 06 Aug 2007 00:28:53 GMT]]></title><description><![CDATA[<p>Vielen Dank, mir leuchtets nun ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339294</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 00:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Tue, 07 Aug 2007 10:05:03 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">typedef std::map&lt;key_type, mapped_type&gt;::iterator iterator;
</code></pre>
</blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Zu Deinem anderen Problem: Da fehlt wohl ein 'typename' (das kannst Du dafür bei Deinem typedef typename T mapped_type; streichen).</p>
</blockquote>
<p>meinst du in etwa so</p>
<pre><code class="language-cpp">typedef typename std::map&lt;key_type, mapped_type&gt;::iterator iterator
</code></pre>
<p>weil nur so schluckts mein compiler aber der schluckt eben auch manchmal sachen, die sich erst später als falsch rausstellen und dann ists doppelt ärgerlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340007</guid><dc:creator><![CDATA[hulk_hogan]]></dc:creator><pubDate>Tue, 07 Aug 2007 10:05:03 GMT</pubDate></item><item><title><![CDATA[Reply to Suche passenden STL-Container on Tue, 07 Aug 2007 10:32:58 GMT]]></title><description><![CDATA[<p>Ja, genau so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340028</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 07 Aug 2007 10:32:58 GMT</pubDate></item></channel></rss>