<?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[Wohin zeigt string::end ?]]></title><description><![CDATA[<p>Hallo,<br />
ich frage mich, worauf der von .end() zurückgegebene Iterator von std::string zeigt. Theoretisch zeigt dieser Iterator ja &quot;hinter das letzte Element&quot;.<br />
string arbeitet ja intern sicher mit const char* . Dabei ist das letzte Element ja das abschließende Nullzeichen. Zeigt der .end() Iterator also auf das Nullzeichen? Oder ist das compiler abhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243620/wohin-zeigt-string-end</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 22:19:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243620.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jun 2009 01:26:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 01:26:01 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich frage mich, worauf der von .end() zurückgegebene Iterator von std::string zeigt. Theoretisch zeigt dieser Iterator ja &quot;hinter das letzte Element&quot;.<br />
string arbeitet ja intern sicher mit const char* . Dabei ist das letzte Element ja das abschließende Nullzeichen. Zeigt der .end() Iterator also auf das Nullzeichen? Oder ist das compiler abhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729186</guid><dc:creator><![CDATA[String?]]></dc:creator><pubDate>Fri, 19 Jun 2009 01:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 01:32:26 GMT]]></title><description><![CDATA[<p>end muss gar nirgendwo hinzeigen, weil es nicht derefernzierbar ist<br />
ist also komplett compiler-abhängig</p>
<p>idR wird es aber ein zeichen hinter das letzte zeigen - nur, dass dort auch stehen kann, was will</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729188</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Jun 2009 01:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 09:56:01 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>end muss gar nirgendwo hinzeigen, weil es nicht derefernzierbar ist</p>
</blockquote>
<p>nicht derefernzierbar mag sein. aber dieser pointer hat einen ganz bestimmte adresse!</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>idR wird es aber ein zeichen hinter das letzte zeigen</p>
</blockquote>
<p>Selbstveständlich zeigt das <strong>immer</strong> auf eine ganz bestimmte Stelle, sonst würde das nur mit viel Glück funtkionieren:</p>
<pre><code class="language-cpp">string staatsfeinde = &quot;Sepp Xsaver Mueller Frank Peter&quot;
string::iterator i = staatsfeinde.begin();
for( ; i!=staatsfeinde.end(); ++i ) {cout &lt;&lt; *i &lt;&lt; endl;}
</code></pre>
<p>Und laut <a href="http://www.cppreference.com/wiki/string/end" rel="nofollow">C++ Reference</a> ist das nicht nur logisch, sondern auch richig! :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729324</guid><dc:creator><![CDATA[Klark Cent]]></dc:creator><pubDate>Fri, 19 Jun 2009 09:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 10:03:54 GMT]]></title><description><![CDATA[<p>Klark Cent schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ein Iterator ist kein Zeiger sondern die Abstraktion eines Zeigers. <code>std::string::end()</code> muss auf gar nichts zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729327</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 19 Jun 2009 10:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 10:19:22 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">string staatsfeinde = &quot;Sepp Xsaver Mueller Frank Peter&quot; 
string::iterator i = staatsfeinde.begin(); 
for( ; i!=staatsfeinde.end(); ++i ) {cout &lt;&lt; *i &lt;&lt; endl;}
</code></pre>
<p>Und laut C++ Reference ist das nicht nur logisch, sondern auch richig!</p>
</blockquote>
<p>Äh, ja, und? Was willst Du damit sagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729335</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 19 Jun 2009 10:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 11:03:22 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/string/string/end/" rel="nofollow">http://www.cplusplus.com/reference/string/string/end/</a></p>
<p>Returns an iterator referring to the next element after the last character in the string.</p>
<p>das heißt, dass du die speicheradresse von cstr()[letztes zeichen] eins weiter zählen lassen kannst und dann bei end() landest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729353</guid><dc:creator><![CDATA[dgrat]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 11:31:13 GMT]]></title><description><![CDATA[<p>dgrat schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/string/string/end/" rel="nofollow">http://www.cplusplus.com/reference/string/string/end/</a></p>
<p>Returns an iterator referring to the next element after the last character in the string.</p>
<p>das heißt, dass du die speicheradresse von cstr()[letztes zeichen] eins weiter zählen lassen kannst und dann bei end() landest.</p>
</blockquote>
<p>Es wird einen Iterator zurückgegeben, dass darfst du nicht einfach überlesen. Ein Iterator muss nicht gleich einem Zeiger sein. Wie Tachyon sagt, ist ein Iterator nur eine Abstraktion. Alles was damit ausgesagt wird: Wenn du den Iterator, welcher von <code>end()</code> zurückgegeben wird, um 1 dekrementierst, dann verweist dieser auf das letzte Element.</p>
<p>Auch noch wichtig:<br />
<code>std::string</code> arbeitet intern nicht mit Nullterminierung. Die Länge wird separat mitgeführt. Auch ist nicht gewährleistet, dass ein std::string Speicher hat, welcher an einem Stück ist. Und <code>c_str</code> muss keinen Zeiger auf den internen Speicher zurückgeben, sondern hier kann auch ein eigener temporärer Puffer erstellt werden.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729375</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 11:39:25 GMT]]></title><description><![CDATA[<p>dgrat schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/string/string/end/" rel="nofollow">http://www.cplusplus.com/reference/string/string/end/</a></p>
<p>Returns an iterator referring to the next element after the last character in the string.</p>
<p>das heißt, dass du die speicheradresse von cstr()[letztes zeichen] eins weiter zählen lassen kannst und dann bei end() landest.</p>
</blockquote>
<p>steht so aber 100pro nicht im standard...<br />
da end nicht dereferenzierbar sein muss, kann es hinzeigen wo es will - unter anderem kann es auch auf 0 zeigen oder einfach gar nirgendwohin zeigen... (stichwort liste und dummy-knoten)<br />
das, was du sagst ist vll in der praxis bei vector so zu finden (und da string meistens von vector abgeleitet ist, auch bei string) - aber imho nirgendwo vorgeschrieben...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729381</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 11:57:22 GMT]]></title><description><![CDATA[<p>Ja und wie geht das dann mit der for schleife?<br />
&quot;Solange iterator ungleich irgendwo ist, inkrementiere&quot; So kann das wohl kaum funktionieren!? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729396</guid><dc:creator><![CDATA[Klark Cent]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:57:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 11:59:22 GMT]]></title><description><![CDATA[<p>Klark Cent schrieb:</p>
<blockquote>
<p>Ja und wie geht das dann mit der for schleife?<br />
&quot;Solange iterator ungleich irgendwo ist, inkrementiere&quot; So kann das wohl kaum funktionieren!? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Nicht ungleich irgend<em>wo</em> sondern ungleich irgend<em>was</em>. Bei 'ner Liste geht es ja auch. Und da gibt es kein &quot;hinter dem letzten Element&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729398</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:04:06 GMT]]></title><description><![CDATA[<p>verstehe ich nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
irgendwo/irgendwas - gibts da irgendein unterschied ??<br />
der != operator vergleicht jedesmal ob die adresse teil des strings ist oder was? Wär das nicht bisserl langsam? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729405</guid><dc:creator><![CDATA[Klark Cent]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:13:59 GMT]]></title><description><![CDATA[<p>der ungleich operator prüft, ob die adresse, auf die der iterator zeigt, gleich der anderen ist - dabei ist aber nicht gesagt, wo der letzte iterator hinzeigt - man nimmt bei listen gern einen dummy-knoten, bei vectoren wird es eins hinter dem letzten element sein(nicht lt. definition, sondern in der praxis) - man könnte end aber auch auf 0 zeigen lassen - nur könnte man das eben nicht so effektiv implementieren, deshalb wird es nicht so häufig gemacht - allerdings würde ich nicht behaupten wollen, dass es nie so gemacht wird - da es keinen richtigen weg gibt, gibt es auch keinen falschen....</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729413</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:21:11 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>der ungleich operator prüft, ob die adresse, auf die der iterator zeigt[...]</p>
</blockquote>
<p>Nein, <code>operator!=</code> überprüft, ob die Iteratoren ungleich sein. Mehr nicht. Das muss nichts mit Adressen zu tun haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729422</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:21:11 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:25:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;limits&gt;
#include &lt;iostream&gt;

#include &lt;cassert&gt;

class WoodooIterator
{
public:
	static int const THE_WOODOO_LIMIT = 10;

private:
	int m_value;

public:
	WoodooIterator()
		: m_value(std::numeric_limits&lt;int&gt;::max())
	{
	}

	WoodooIterator(int start)
		: m_value(start)
	{
	}

public:
	WoodooIterator&amp; operator ++()
	{
		assert(m_value &lt;= THE_WOODOO_LIMIT);

		++m_value;

		if(m_value &gt; THE_WOODOO_LIMIT)
		{
			m_value = std::numeric_limits&lt;int&gt;::max();
		}

		return *this;
	}

	WoodooIterator&amp; operator --()
	{
		if(m_value &gt; THE_WOODOO_LIMIT)
		{
			m_value = THE_WOODOO_LIMIT;
		}
		else
		{
			--m_value;
		}

		return *this;
	}

	int operator *() const
	{
		assert(m_value &lt;= THE_WOODOO_LIMIT);
		return m_value;
	}

	bool operator !=(WoodooIterator const&amp; rhs) const
	{
		return m_value != rhs.m_value;
	}
};

int main()
{
	WoodooIterator iter = WoodooIterator(-8);
	WoodooIterator end;

	for(; iter != end; ++iter)
	{
		std::cout &lt;&lt; *iter &lt;&lt; ',';
	}

	std::cout &lt;&lt; *(--end) &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Der Iterator ist zwar nicht ganz Standardkonform, aber er sollte aufzeigen, was wir dir probieren zu erklären. Der <code>end</code> Iterator hat einen völlig anderen Wert, als die anderen. Sein Wert ist nicht ein nachfolge Wert. Wenn man den <code>end</code> Iterator dekrementiert, bekommt man allerdings trotzdem den letzten Wert.<br />
Auch siehst du hier ganz klar nochmals, dass ein Iterator nicht gleich einer Adresse sein muss. Man kann alles in einen Iterator packen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729425</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:48:56 GMT]]></title><description><![CDATA[<p>Ein etwas kürzeres Beispiel: <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>
<pre><code class="language-cpp">std::istream_iterator&lt;std::string&gt; iter(std::cin);
std::istream_iterator&lt;std::string&gt; end;

for(; iter != end; ++iter)
{
    std::cout &lt;&lt; *iter &lt;&lt; '\n';
}
</code></pre>
<p>Wie soll hier ein Zeiger hinter das Ende des Streams aussehen? Wo ist denn das Ende des Streams? Ein Zeiger? Wohl kaum.</p>
<p>Edit:<br />
Aber das Beispiel von Dravere zeigt gut, wie es intern aussehen kann. :p</p>
<p>Beim String könnten intern genauso gut irgendwelche Indizes verwaltet werden, und <code>std::string::end()</code> arbeitet irgendwie mit <code>std::string::npos</code> . Alles mögliche ist denkbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729434</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 12:38:27 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Ein etwas kürzeres Beispiel: <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>
</blockquote>
<p>Da gebe ich mir extra solche Mühe ... <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="😃"
    /> <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="🤡"
    /><br />
Aber gutes Beispiel, vielleicht helfen ja auch beide <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729438</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 19 Jun 2009 12:38:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 13:26:46 GMT]]></title><description><![CDATA[<p>yeah ich habs gecheckt! TYVM! <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/1729468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729468</guid><dc:creator><![CDATA[Klark Cent]]></dc:creator><pubDate>Fri, 19 Jun 2009 13:26:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wohin zeigt string::end ? on Fri, 19 Jun 2009 14:41:28 GMT]]></title><description><![CDATA[<p>Das geht Dich nichts an.<br />
(Nach reichlich zehn Jahren durfte ich endlich mal diesen Satz in einem Fachforum schreiben, yeah!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729538</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 19 Jun 2009 14:41:28 GMT</pubDate></item></channel></rss>