<?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[in for_each eine member-funktion aufrufen - wie?]]></title><description><![CDATA[<p>hallo,</p>
<p>ich hätte da eine klasse und würde gerne folgendes realisieren:</p>
<pre><code>class Clazz {

public:
  Clazz() {
    this-&gt;model = new std::vector&lt;std::string&gt;(5);
  }
  ~Clazz() {
    delete model;
  }

  void add(std::string&amp; value)
   this-&gt;model-&gt;push_back(value);
  }

  void init() {
    std::vector&lt;std::string&gt; tmp;
    tmp.push_back(std::string(&quot;test 1&quot;));
    tmp.push_back(std::string(&quot;test 2&quot;));
    tmp.push_back(std::string(&quot;test 3&quot;));
    tmp.push_back(std::string(&quot;test 4&quot;));
    tmp.push_back(std::string(&quot;test 5&quot;));

    /** vector tmp durchlaufen - add methode aufrufen lassen */
    std::for_each(tmp.begin(), tmp.end(), add);
  }

private:
  std::vector&lt;std::string&gt; *model;
};
</code></pre>
<p>wie kann ich den vector tmp durchlaufen und jedesmal<br />
die methode add aufrufen lassen, der ein string übergeben wird.<br />
ist das irgendwie möglich?</p>
<p>sorry, ich bin noch anfänger! <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>ich wäre sehr dankbar für vorschläge.</p>
<p>gruss<br />
QuornJulio</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306062/in-for_each-eine-member-funktion-aufrufen-wie</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 09:00:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306062.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jul 2012 19:40:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to in for_each eine member-funktion aufrufen - wie? on Mon, 16 Jul 2012 19:40:35 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ich hätte da eine klasse und würde gerne folgendes realisieren:</p>
<pre><code>class Clazz {

public:
  Clazz() {
    this-&gt;model = new std::vector&lt;std::string&gt;(5);
  }
  ~Clazz() {
    delete model;
  }

  void add(std::string&amp; value)
   this-&gt;model-&gt;push_back(value);
  }

  void init() {
    std::vector&lt;std::string&gt; tmp;
    tmp.push_back(std::string(&quot;test 1&quot;));
    tmp.push_back(std::string(&quot;test 2&quot;));
    tmp.push_back(std::string(&quot;test 3&quot;));
    tmp.push_back(std::string(&quot;test 4&quot;));
    tmp.push_back(std::string(&quot;test 5&quot;));

    /** vector tmp durchlaufen - add methode aufrufen lassen */
    std::for_each(tmp.begin(), tmp.end(), add);
  }

private:
  std::vector&lt;std::string&gt; *model;
};
</code></pre>
<p>wie kann ich den vector tmp durchlaufen und jedesmal<br />
die methode add aufrufen lassen, der ein string übergeben wird.<br />
ist das irgendwie möglich?</p>
<p>sorry, ich bin noch anfänger! <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>ich wäre sehr dankbar für vorschläge.</p>
<p>gruss<br />
QuornJulio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233300</guid><dc:creator><![CDATA[QuornJulio]]></dc:creator><pubDate>Mon, 16 Jul 2012 19:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to in for_each eine member-funktion aufrufen - wie? on Mon, 16 Jul 2012 19:56:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Clazz
{
public:
  void add(std::string const&amp; value)
  {
    model.push_back(value);
  }

  void init();

private:
  std::vector&lt;std::string&gt; model;
};

// in einer cpp-datei definieren:

void Clazz::init()
{
  std::vector&lt;std::string&gt; tmp;
  tmp.push_back(&quot;test 1&quot;);
  tmp.push_back(&quot;test 2&quot;);
  tmp.push_back(&quot;test 3&quot;);
  tmp.push_back(&quot;test 4&quot;);
  tmp.push_back(&quot;test 5&quot;);

  model.insert(model.end(),tmp.begin(),tmp.end()); // hinten dranhängen
  // oder: model = tmp; // ersetzen
}
</code></pre>
<p>Die Vektor-Klasse bietet mit der insert-Funktion eigentlich das an, was du brauchst. Allerdings frage ich mich, warum du in <code>init</code> nicht direkt die strings an den model Vektor dranhängst und stattdessen tmp erzeugst.</p>
<p>Das mit dem Zeiger da bei dir ist auch pfui. Du hast außerdem die Dreierregel verletzt. Ähnlich ist im Funktionskontext</p>
<pre><code class="language-cpp">void foo()
{
  string* p = new string;
  ...
  delete p;
}
</code></pre>
<p>der Zeiger da auch total pfui! Da schreibst du einfach:</p>
<pre><code class="language-cpp">void foo()
{
  string s;
  ...
}
</code></pre>
<p>und gut ist. Warum kompliziert, wenn es auch einfach geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233302</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 16 Jul 2012 19:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to in for_each eine member-funktion aufrufen - wie? on Mon, 16 Jul 2012 20:17:22 GMT]]></title><description><![CDATA[<p>QuornJulio schrieb:</p>
<blockquote>
<p>wie kann ich den vector tmp durchlaufen und jedesmal<br />
die methode add aufrufen lassen, der ein string übergeben wird.<br />
ist das irgendwie möglich?</p>
</blockquote>
<p>Obwohl vector&lt;&gt;::insert hier echt vorzuziehen wäre, will ich dir die Antwort auf deine eigentliche Frage nicht vorenthalten:</p>
<p>for_each ist eigentlich erst ab C++11 in diesem Fall vernünftig einsetzbar, es sei denn, du magst dir einen eigenen Funktor schreiben oder findest boost::bind okay.</p>
<pre><code class="language-cpp">// for_each + Lambda (C++11):
for_each(begin(tmp),end(tmp),[this](string const&amp; s){this-&gt;add(s);});

// for_each + boost::bind oder std::bind (letzteres ist auch C++11)
for_each(tmp.begin(),tmp.end(),bind(add,this,_1));
</code></pre>
<p>Weitere Alternative:</p>
<pre><code class="language-cpp">// copy + back_inserter
copy(tmp.begin(),tmp.end(),back_inserter(model));
</code></pre>
<p>Da geht sicherlich noch einiges <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>Aber wie gesagt, vector&lt;&gt;::insert ist interessanter, da so nicht Elemente einzeln eingefügt werden sondern in einem Rutsch. Hier kann der vector sich auch besser darauf einstellen, wieviel Platz er noch so reservieren muss, falls nicht mehr alle Elemente da im freien Platz reinpassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233308</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 16 Jul 2012 20:17:22 GMT</pubDate></item><item><title><![CDATA[Reply to in for_each eine member-funktion aufrufen - wie? on Mon, 16 Jul 2012 20:29:21 GMT]]></title><description><![CDATA[<p>Der usprüngliche Code ist nich besonders sinnvoll. Erst wird ein Vektor mit 5 leeren Strings erzeugt. Und dann sollen 5 weitere angehängt werden? Noch dazu in einer Funktion, die sich init nennt?</p>
<p>Vom Ergebnis her gedacht, dürfte eine direkte Initialisierung im Konstrukor das Richtige sein</p>
<pre><code class="language-cpp">class Clazz
{
public:
  Clazz()
    : model{&quot;test 1&quot;, &quot;test 2&quot;, &quot;test 3&quot;, &quot;test 4&quot;, &quot;test 5&quot;}
  {}

private:
  std::vector&lt;std::string&gt; model;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2233309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233309</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 16 Jul 2012 20:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to in for_each eine member-funktion aufrufen - wie? on Thu, 19 Jul 2012 16:56:26 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>es ging mir ausschließlich um den aufruf von &quot;add&quot; in for_each.<br />
folgende möglichkeiten kenne ich:</p>
<pre><code>void add(const std::string&amp; value) {
	std::cout &lt;&lt; value &lt;&lt; std::endl;
}

struct printVector {
	void operator()(const string&amp; value) {
		std::cout &lt;&lt; value &lt;&lt; std::endl;
	}
} print;

int main() {
	std::vector&lt;std::string&gt; mVector;
	mVector.push_back(&quot;Test 1&quot;);
	mVector.push_back(&quot;Test 2&quot;);

        std::for_each(mVector.begin(), mVector.end(), add);
        /**
         * Auch möglich.
         * std::for_each(mVector.begin(), mVector.end(), print);
         */
	return 0;
}
</code></pre>
<p>aber eben eine member-methode aufrufen, war mir nicht &quot;bekannt&quot;.<br />
mit boost::bind hat es dann geklappt.</p>
<pre><code>std::for_each(tmp.begin(), tmp.end(), boost::bind(&amp;Clazz::add, this, _1));
</code></pre>
<p>bedanke mich sehr für eure tipps. <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>
<p>gruss<br />
QuornJulio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234169</guid><dc:creator><![CDATA[QuornJulio]]></dc:creator><pubDate>Thu, 19 Jul 2012 16:56:26 GMT</pubDate></item></channel></rss>