<?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[Eigener Vector]]></title><description><![CDATA[<p>Hoi ich hab mich eben gefragt wie wohl der Vector intern aussehen könnte.<br />
Ich hab einfach mal drauf los programmiert und da kam das hier bei raus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

template &lt;class T&gt;
class CustomVector
{
public:
        T *var;

        CustomVector( T p );
        ~CustomVector();

};

template &lt;class T&gt;
CustomVector&lt;T&gt;::CustomVector( T p ) : var( new T [p] )
{

}

template &lt;class T&gt;
CustomVector&lt;T&gt; ::~CustomVector()
{
       delete []var;
}

int main(int argc, char* argv[])
{
CustomVector&lt;char&gt;vec(3);

vec.var[2]='A';
cout&lt;&lt;vec.var[2];

// vec[2]='A';  &lt;-- So ein Schreibweise will ich benutzen können^^

return 0;
}
</code></pre>
<p>Wie wurde der Vector implementiert das man sowas schreiben darf wie:</p>
<p>vec[2]='A';<br />
Ich muss bei mir ja immer schreiben: vec.var[..]=...;</p>
<p>Oder ist diese andere Schreibweise im Standart festgelegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307497/eigener-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 18:02:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307497.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Aug 2012 13:43:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 13:43:34 GMT]]></title><description><![CDATA[<p>Hoi ich hab mich eben gefragt wie wohl der Vector intern aussehen könnte.<br />
Ich hab einfach mal drauf los programmiert und da kam das hier bei raus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

template &lt;class T&gt;
class CustomVector
{
public:
        T *var;

        CustomVector( T p );
        ~CustomVector();

};

template &lt;class T&gt;
CustomVector&lt;T&gt;::CustomVector( T p ) : var( new T [p] )
{

}

template &lt;class T&gt;
CustomVector&lt;T&gt; ::~CustomVector()
{
       delete []var;
}

int main(int argc, char* argv[])
{
CustomVector&lt;char&gt;vec(3);

vec.var[2]='A';
cout&lt;&lt;vec.var[2];

// vec[2]='A';  &lt;-- So ein Schreibweise will ich benutzen können^^

return 0;
}
</code></pre>
<p>Wie wurde der Vector implementiert das man sowas schreiben darf wie:</p>
<p>vec[2]='A';<br />
Ich muss bei mir ja immer schreiben: vec.var[..]=...;</p>
<p>Oder ist diese andere Schreibweise im Standart festgelegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246313</guid><dc:creator><![CDATA[DerForscher]]></dc:creator><pubDate>Tue, 28 Aug 2012 13:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 13:45:18 GMT]]></title><description><![CDATA[<p>Dazu muss operator[] überladen werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246315</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Tue, 28 Aug 2012 13:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 14:31:06 GMT]]></title><description><![CDATA[<p>Danke funktioniert.</p>
<p>Hier die Lösung.(Vielleicht kann wer anderes damit auch noch was anfangen)</p>
<pre><code class="language-cpp">template &lt;class T&gt;
T &amp;CustomVector&lt;T&gt; ::operator[] ( int index )
{
        return var[index];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2246332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246332</guid><dc:creator><![CDATA[DerForscher]]></dc:creator><pubDate>Tue, 28 Aug 2012 14:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 14:38:15 GMT]]></title><description><![CDATA[<p>DerForscher schrieb:</p>
<blockquote>
<pre><code class="language-cpp">[...] int index )
</code></pre>
</blockquote>
<p>Für Speichergrößen verwendet man in der Regel <code>std::size_t</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246335</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 28 Aug 2012 14:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 15:01:39 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Für Speichergrößen verwendet man in der Regel <code>std::size_t</code> .</p>
</blockquote>
<p>Auch <code>xy::size_type</code> , <code>unsigned int</code> oder <code>std::ptrdiff_t</code> (unter Anderem).</p>
<p><code>std::size_t</code> wird vielleicht am häufigsten verwendet, aber nicht einmal die Standardbibliothek ist diesbezezüglich konsistent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246343</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 28 Aug 2012 15:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 15:24:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Auch <code>xy::size_type</code> , <code>unsigned int</code> oder <code>std::ptrdiff_t</code> (unter Anderem).</p>
</blockquote>
<p>Da gibt es aber feine Unterschiede zwischen dem, was diese Datentypen/typedefs bedeuten.</p>
<blockquote>
<p><code>std::size_t</code> wird vielleicht am häufigsten verwendet, aber nicht einmal die Standardbibliothek ist diesbezezüglich konsistent.</p>
</blockquote>
<p>Wo denn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246352</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Aug 2012 15:24:21 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 15:54:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;X&gt; vec = ...;

std::size_t    n = vec.size();
std::ptrdiff_t m = std::count(vec.begin(), vec.end(), x);
</code></pre>
<pre><code class="language-cpp">std::istream&amp; stream = ...;
std::vector&lt;char&gt; data = ...;

stream.read(&amp;data[0], data.size()); // std::size_t -&gt; std::streamsize
</code></pre>
<p>Auch ist die Bedeutung nicht immer exakt die gleiche. <code>std::size_t</code> steht zwar für irgendeine Grösse, kann aber sowohl Anzahl Elemente als auch Anzahl Bytes bedeuten.</p>
<p>Von Member-Typedefs wie <code>size_type</code> oder <code>difference_type</code> will ich gar nicht erst anfangen. Gibt es eigentlich Leute, welche diese konsequent im Programm nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246365</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 28 Aug 2012 15:54:29 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 15:57:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Von Member-Typedefs wie <code>size_type</code> oder <code>difference_type</code> will ich gar nicht erst anfangen. Gibt es eigentlich Leute, welche diese konsequent im Programm nutzen?</p>
</blockquote>
<p><code>size_type</code> ja, <code>difference_type</code> nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246372</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 Aug 2012 15:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 16:23:07 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Für Speichergrößen verwendet man in der Regel <code>std::size_t</code> .</p>
</blockquote>
<p>Auch <code>xy::size_type</code> , <code>unsigned int</code> oder <code>std::ptrdiff_t</code> (unter Anderem).</p>
</blockquote>
<p><code>unsigned int</code> ? Wo steht das? IMHO garantiert der Standard, daß Speichermengen <em>immer</em> in <code>std::size_t</code> passen - bei <code>unsigned int</code> ist das ein Ratespiel.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p><code>std::size_t</code> wird vielleicht am häufigsten verwendet, aber nicht einmal die Standardbibliothek ist diesbezezüglich konsistent.</p>
</blockquote>
<p>Wenn eine Implementierung der STL an entsprechenden Stellen nicht <code>std::size_t</code> , <code>container::size_type</code> bzw. entsprechende verwendet, ist sie kaputt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246389</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 28 Aug 2012 16:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 16:33:02 GMT]]></title><description><![CDATA[<p>size_type stammt vom verwendeten Allokator. Und der default allocator muss hierfür size_t benutzen.</p>
<p>streams sind keine Container, insbesondere können entsprechende Files ja ohne weiteres größer sein, als durch size_t (32-bit System) darstellbar. Logischerweise ist hier size_t nicht angebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246395</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Aug 2012 16:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 16:59:10 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>size_type stammt vom verwendeten Allokator. Und der default allocator muss hierfür size_t benutzen.</p>
</blockquote>
<p>Und wieder was gelernt...</p>
<p>Allerdings drückt es die Intention wieder besser aus, finde ich - was aber schnell zu einem kryptischen <code>typename</code> -Gefrickel werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246402</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 Aug 2012 16:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 17:26:36 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p><code>unsigned int</code> ?</p>
</blockquote>
<p>Einige Bibliotheken benutzen <code>int</code> oder <code>unsigned int</code> , um Objekte zu zählen -- also auch Speichergrösse, wenn letztere sich in Containern befinden. Das ist übrigens auch, was mir nicht gefällt: Korrekterweise müsste man ständig <code>std::size_t</code> weiterreichen, auch wenn in einem High-Level-Kontext andere Datentypen verwendet werden (und Container Implementierungsdetails sind).</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>IMHO garantiert der Standard, daß Speichermengen <em>immer</em> in <code>std::size_t</code> passen - bei <code>unsigned int</code> ist das ein Ratespiel.</p>
</blockquote>
<p>Das stimmt (sollte auf heutigen Plattformen aber erst bei Grössen ab 2^32 relevant werden).</p>
<p>camper schrieb:</p>
<blockquote>
<p>size_type stammt vom verwendeten Allokator. Und der default allocator muss hierfür size_t benutzen.</p>
</blockquote>
<p>Ja. Die Typedefs existieren doch, um andere Typen zu ermöglichen... Nutzt das jemand?</p>
<p>camper schrieb:</p>
<blockquote>
<p>streams sind keine Container, insbesondere können entsprechende Files ja ohne weiteres größer sein, als durch size_t (32-bit System) darstellbar. Logischerweise ist hier size_t nicht angebracht.</p>
</blockquote>
<p>Danke für die Erklärung. Bedeutet das, dass ein <code>std::size_t</code> immer problemlos in einen <code>std::streamsize</code> konvertierbar ist (kompatibler Typ, kein Datenverlust)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246409</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 28 Aug 2012 17:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 17:49:19 GMT]]></title><description><![CDATA[<p>n3337 schrieb:</p>
<blockquote>
<p>27.5.2 Types [stream.types]<br />
typedef implementation-defined streamoff;<br />
1 The type streamoff is a synonym for one of the signed basic integral types of sufficient size to represent<br />
the maximum possible file size for the operating system.296<br />
typedef implementation-defined streamsize;<br />
2 The type streamsize is a synonym for one of the signed basic integral types. It is used to represent<br />
the number of characters transferred in an I/O operation, or the size of I/O buffers.297</p>
<ol start="297">
<li>streamsize is used in most places where ISO C would use size_t. Most of the uses of streamsize could use size_t,<br />
except for the strstreambuf constructors, which require negative values. It should probably be the signed type corresponding<br />
to size_t (which is what Posix.2 calls ssize_t).</li>
</ol>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2246420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246420</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 Aug 2012 17:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Vector on Tue, 28 Aug 2012 18:18:35 GMT]]></title><description><![CDATA[<p>Also nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246428</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 Aug 2012 18:18:35 GMT</pubDate></item></channel></rss>