<?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[STL vector operator()]]></title><description><![CDATA[<p>Hi zusammen !</p>
<p>Hätte eine Frage zum operator() des STL vectors:<br />
Ich wollte diesen operator überladen, aber anscheinend gibt es ihn noch garnicht ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Kann man ihn deshalb neu definieren ?</p>
<p>Also im Vergleich zum [] operator möchte ich einfach noch einige Abfragen innerhalb des () operators anstellen.</p>
<p>Danke für eure Antworten ! <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>Gruß,<br />
GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154960/stl-vector-operator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 05:29:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154960.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Aug 2006 10:30:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 10:30:53 GMT]]></title><description><![CDATA[<p>Hi zusammen !</p>
<p>Hätte eine Frage zum operator() des STL vectors:<br />
Ich wollte diesen operator überladen, aber anscheinend gibt es ihn noch garnicht ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Kann man ihn deshalb neu definieren ?</p>
<p>Also im Vergleich zum [] operator möchte ich einfach noch einige Abfragen innerhalb des () operators anstellen.</p>
<p>Danke für eure Antworten ! <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>Gruß,<br />
GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108374</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 10:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 10:47:32 GMT]]></title><description><![CDATA[<p>Inwiefern möchtest du den Operator überladen? Wills du std::vector als Basisklasse verwenden? Grundsätzlich wäre das nämlich kein guter Gedanke... <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üße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108386</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 01 Aug 2006 10:47:32 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 11:59:10 GMT]]></title><description><![CDATA[<p>oh doch, wollte ich eigentlich schon. *g</p>
<p>mein Ziel ist es einfach auf die normale Weise mit [] weiterhin zugreifen zu können und zusätzlich, dass ich auf meine Weise noch irgendwie anders zugreifen kann, eben z.B. über operator(). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Was spricht denn dagegen den operator() zu überladen ? V.a. hab ich nach wie vor das Problem, dass es diesen operator() für Vektoren garnicht zu geben scheint. Muss zugeben, dass ich nicht so beflissen bin in dieser Geschichte, aber über</p>
<pre><code class="language-cpp">int std::vector&lt; int &gt; ::operator ()(int i, int j);
</code></pre>
<p>sollte man doch eigentlich diesen operator() definieren können ?!</p>
<p>Was wäre denn eine Alternative ?</p>
<p>Gruß,<br />
GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108440</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 11:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 12:05:56 GMT]]></title><description><![CDATA[<p>MSDN:</p>
<blockquote>
<p>The function-call operator, invoked using parentheses, is a binary operator.</p>
<p>primary-expression ( expression-listopt )<br />
In this context, primary-expression is the first operand, and expression-list, a possibly empty list of arguments, is the second operand. The function-call operator is used for operations that require a number of parameters. This works because expression-list is a list instead of a single operand. The function-call operator must be a nonstatic member function.</p>
<p>The function-call operator, when overloaded, does not modify how functions are called; rather, it modifies how the operator is to be interpreted when applied to objects of a given class type. For example, the following code would usually be meaningless:</p>
<p>Point pt;<br />
pt( 3, 2 );<br />
Given an appropriate overloaded function-call operator, however, this syntax can be used to offset the x coordinate 3 units and the y coordinate 2 units. The following code shows such a definition:</p>
<p>// function_call.cpp<br />
class Point<br />
{<br />
public:<br />
Point() { _x = _y = 0; }<br />
Point &amp;operator()( int dx, int dy )<br />
{ _x += dx; _y += dy; return *this; }<br />
private:<br />
int _x, _y;<br />
};</p>
<p>int main()<br />
{<br />
Point pt;<br />
pt( 3, 2 );<br />
}<br />
Note that the function-call operator is applied to the name of an object, not the name of a function.</p>
</blockquote>
<p>Wenns dir darum geht, das SO nutzen zu können, kannst du es ja versuchen. Ich wäre damit allerdings vorsichtig. Im Zweifelsfall solltest du (wie es die STL mit &quot;at()&quot; ja vormacht) einen kurzen, sprechenden Funktionsnamen verwenden und operator() in Ruhe lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108447</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Tue, 01 Aug 2006 12:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 12:35:03 GMT]]></title><description><![CDATA[<p>hm hmm hmmm <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>
<p>also mir leuchtet irgendwie nicht so recht ein, was das Beispiel Point hier mit der Klasse Vector zu tun hat.<br />
Innerhalb der Klasse Point wird hier ja doch operator() definiert! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Aber ich kann ja schlecht in der Klasse Vector rumfummeln, sondern hab eben versucht von außen mir diesen operator() zu definieren/überladen.</p>
<p>Was ist denn konkret falsch, wenn ich in meiner<br />
test.hpp<br />
das hier schreib:</p>
<pre><code class="language-cpp">inline int std::vector&lt; int &gt;::operator()(int i, int j){
	return i*j;
}
</code></pre>
<p>Mein VS Compiler meint jedenfalls nur</p>
<blockquote>
<p>'()': Ist kein Element von 'std::vector&lt;_Ty&gt;'<br />
1&gt; with<br />
1&gt; [<br />
1&gt; _Ty=int<br />
1&gt; ]</p>
</blockquote>
<p>Aber ich will mir diesen operator ja doch neu definieren! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108477</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 12:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 12:56:10 GMT]]></title><description><![CDATA[<p>Du kannst nicht einfach eine bestehende Implementierung verändern, das wäre ziemlich am Open-Closed Prinzip vorbei, selbst wenn vector einen operator() hätte (was er nicht hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108498</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 01 Aug 2006 12:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 13:06:38 GMT]]></title><description><![CDATA[<p>ohh ok <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
aber heißt das wohl auch, dass ich mir diesen operator nicht innerhalb meiner Klasse definieren darf ?<br />
Was bliebe denn da noch ??</p>
<p>Dankeschön <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>GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108509</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 13:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 13:09:48 GMT]]></title><description><![CDATA[<p>Innerhalb deiner Klasse kannst du definieren was du willst. Nur ableiten von std::vector ist, wie gesagt, keine gute Idee. Die STL Container haben (alle??) keine virtuellen Destruktoren, was zu bescheuerten Problemen führen kann...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108511</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 01 Aug 2006 13:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 13:26:25 GMT]]></title><description><![CDATA[<p>huch,<br />
leite ich wohl mit dieser Anweisung von Vector ab ?</p>
<pre><code class="language-cpp">inline int std::vector&lt; int &gt;::operator()(int i, int j){
    return i*j;
}
</code></pre>
<p>Was kann ich denn überhaupt konkret machen, ohne abzuleiten ?<br />
Am liebsten Code, weil ich grad noch dermaßen ohne Plan bin.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Also schon mal Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108527</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 13:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 14:11:42 GMT]]></title><description><![CDATA[<p>Nein, damit definierst du eine nichtdeklarierte Methode für die Klasse vector&lt;&gt; - und das ist verboten. (und versuch lieber nicht, in den Standard-Headern rumzupfuschen)</p>
<p>PS: Und Ableitung ist afaik die einzige Möglichkeit, einer vector-Abart eine neue Methode zu spendieren.</p>
<p>PPS: Was soll dieser operator eigentlich im Endeffekt bewirken? So ein &quot;return i*j;&quot; hat imho nichts in der Containerklasse zu suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108572</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 01 Aug 2006 14:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 14:38:38 GMT]]></title><description><![CDATA[<blockquote>
<p>PS: Und Ableitung ist afaik die einzige Möglichkeit, einer vector-Abart eine neue Methode zu spendieren.</p>
</blockquote>
<p>ohne virtuellen dtor wär das ziemlicher müll, ausser man leitet private ab. aber dann könnte man genausogut vector als member nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108605</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 01 Aug 2006 14:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 14:39:14 GMT]]></title><description><![CDATA[<p>Also, im Prinzip umfasst dieser Vektor Zellen eines 3-dimensionalen Gebietes.<br />
Nun habe ich periodische Randbedingungen, d.h. wird versucht auf eine Zelle außerhalb des Gebietes zuzugreifen, z.B. die Zelle direkt links vom linken Rand, so soll stattdessen die Zelle INNERHALB des Gebietes, also direkt links vom rechten Rand, zurückgegeben werden.</p>
<p>Der Code schaut prinzipiell dann folgendermaßen aus:</p>
<pre><code class="language-cpp">class Grid{
    public:
		std::vector&lt; cell &gt; cellVec;

		//Access operator
		inline cell std::vector&lt; cell &gt;::operator()( int i, int j, int k );

		void accessCells();

    private:

		//Number of Cells in x, y and z-direction
        const int nx;
        const int ny;
        const int nz;		

		inline vector Grid::operator()( uint i, uint j, uint k )
		{
			//Treatment of the periodic boundary condtions
			if( k &lt; 0 ) k += nz;
			else if( k &gt;= nz ) k -= nz;
			if( j &lt; 0 ) j += ny;
			else if( j &gt;= ny ) j -= ny;
			if( i &lt; 0 ) i += nx;
			else if( i &gt;= nx ) i -= nx;

                  // cellVec is 1-dim 
			return cellVec[i+(j+k*ny)*nx];
		}		
};

void Grid::accessCells()
{
	for(uint k=0; k&lt;nz; ++k){
        for(uint j=0; j&lt;ny; ++j){
            for(uint i=0; i&lt;nx; ++i){
				// access somehow on neighbor cells
				cellVec(i,j-1,k).F = cellVec(i,j,k).F;
			}
		}
	}
}
</code></pre>
<p>Spricht wirklich so viel gegen Ableitung ?<br />
Im moment würde ich nämlich gerne wie CStoll sagt, dieser vector-Abart eine neue Methode spendieren. <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>
<p>Lieben Gruß,<br />
GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108608</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 14:39:14 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 16:17:54 GMT]]></title><description><![CDATA[<p>Das kannst du doch auch in deine Grid-Klasse packen. Die hat doch schon einen vector als Member. Den machst du am besten auch noch private und schreibst dir entsprechende Zugriffsfunktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108695</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 01 Aug 2006 16:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 16:48:24 GMT]]></title><description><![CDATA[<p>mhhh, ich kann mir nicht vorstellen wie das mit diesen Zugriffsfunktionen aussehen soll.<br />
Braunstein, wärest du noch so nett und würdest mir ein Code Beispiel geben ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108715</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 16:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 16:58:33 GMT]]></title><description><![CDATA[<p>Du hast doch schon eine. Den operator() deiner Grid-Klasse. Die Funktion hat nur den falschen Rückgabetyp (vielleicht nur verschrieben, das würde so nicht compilieren).</p>
<pre><code class="language-cpp">cell Grid::operator()( uint i, uint j, uint k ) const
{...
</code></pre>
<p>Das inline ist hier unnötig. Die Klasse (oder struct) cell muß natürlich kopierbar sein. Man könnte hier auch ein const cell&amp; zurückgeben. Wenn du in diesen Vector schreiben willst brauchst du halt noch eine Funktion, die eine Referenz auf ein vector-Element zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108721</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 01 Aug 2006 16:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to STL vector operator() on Tue, 01 Aug 2006 23:30:33 GMT]]></title><description><![CDATA[<p>also, klappt wunderbar jetzt ! <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="🙂"
    /><br />
Danke an alle für die Hilfe !</p>
<p>Gruß,<br />
GiantGeorge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108904</guid><dc:creator><![CDATA[GiantGeorge]]></dc:creator><pubDate>Tue, 01 Aug 2006 23:30:33 GMT</pubDate></item></channel></rss>