<?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[Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren]]></title><description><![CDATA[<p>Sorry für den Titel, lässt sich blöd beschreiben...</p>
<p>ich habe eine struct in der art:</p>
<p>typedef struct{<br />
int a;<br />
double b;<br />
}s;</p>
<p>und einen vector davon:</p>
<p>vector &lt;s&gt; v;</p>
<p>jetzt möchte ich die double-werte aus v in einen vector &lt;double&gt; v2 kopieren... gibts da eine angenehme lösung <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>bräuchte sowas wie:</p>
<p>v2.assign(v.begin()-&gt;b,v.end()-&gt;b); //was natürlich nicht so geht <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/300928/bereiche-aus-vector-lt-struct-gt-nach-vector-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 11:32:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300928.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Mar 2012 11:51:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 11:51:30 GMT]]></title><description><![CDATA[<p>Sorry für den Titel, lässt sich blöd beschreiben...</p>
<p>ich habe eine struct in der art:</p>
<p>typedef struct{<br />
int a;<br />
double b;<br />
}s;</p>
<p>und einen vector davon:</p>
<p>vector &lt;s&gt; v;</p>
<p>jetzt möchte ich die double-werte aus v in einen vector &lt;double&gt; v2 kopieren... gibts da eine angenehme lösung <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>bräuchte sowas wie:</p>
<p>v2.assign(v.begin()-&gt;b,v.end()-&gt;b); //was natürlich nicht so geht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2191524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191524</guid><dc:creator><![CDATA[SvenStueck]]></dc:creator><pubDate>Wed, 14 Mar 2012 11:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 12:17:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef struct
{
    int a;
    double b;

    operator double()
    {
        return b;
    }
}s;

v2.assign(v.begin(),v.end());
</code></pre>
<p>das würde gehen.. Alleedings sollte man sich genau überlegen warum man es so braucht.<br />
solche „versteckte“ Konvertierungen können später zu einem Problem werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191532</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 12:05:34 GMT]]></title><description><![CDATA[<p>Ja.. also wenn das unbedingt ein Einzeiler mit Hilfe der Standardbibliothek werden soll, kannste dir bestimmt irgendwas mit std::transform und Lambdas basteln. Ob das allerdings sinnvoll ist wage ich zu bezweifeln, die kleine .push_back()/ = Schleife wird dich schon nicht überfordern. <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/2191537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191537</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 12:51:33 GMT]]></title><description><![CDATA[<p>Huh, das mit dem Operator kannte ich noch gar nicht <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="😮"
    /> funktioniert aber auch so irgendwie nicht...</p>
<p>Einzeiler wäre schon von vorteil, bzw. einfach schöner <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>ansonsten würde ich dan freilich ne schleife nehmen. Wollte nur vorher klären, ob es da keine &quot;standartfunktion&quot; gibt, die ich nur mal wieder nicht finde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191555</guid><dc:creator><![CDATA[SvenStueck]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 12:55:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;

struct test
{
	int a;
	double b;

	test( int i, double d )
		: a( i ), b( d )
	{}

	test() : a( 0 ), b( 0.0 ) {}

	operator double()
	{
		return b;
	}

	operator int()
	{
		return a;
	}
};

//und dann in main..
	std::vector&lt; test &gt; testA;
	testA.reserve( 20 );
	for ( int i = 0; i &lt; 20; ++i )
	{
		testA.push_back( test( i, i * 2 * 3.14 ) );
	}
	std::vector&lt; double &gt; dtest;
	dtest.assign( testA.begin(), testA.end() );
</code></pre>
<p>bei mir funktioniert alles..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191558</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 13:06:40 GMT]]></title><description><![CDATA[<p>ungetestet:</p>
<pre><code class="language-cpp">vector&lt;s&gt; v;
vector&lt;double&gt; d;

//einzeller
for(auto&amp; e: v) d.push_back(e.b);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2191562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191562</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 14 Mar 2012 13:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 13:19:33 GMT]]></title><description><![CDATA[<p>Sind Links zu solchen Seiten in diesem Forum erlaubt?</p>
<p>Falls es sich bei den Seite hinter diesen Links um Rezepte-Webseiten oder Ähnliches handelt dann könnt ihr diesen Post ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191572</guid><dc:creator><![CDATA[Signatur]]></dc:creator><pubDate>Wed, 14 Mar 2012 13:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 13:24:55 GMT]]></title><description><![CDATA[<p>In C++03 ginge Folgendes:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

class s {
public:
  inline s(int a, double b) : a_(a), b_(b) { }

  inline int    a() const { return a_; }
  inline double b() const { return b_; }

private:
  int a_;
  double b_;
};

int main() {
  std::vector&lt;s     &gt; v_s;
  std::vector&lt;int   &gt; v_a;
  std::vector&lt;double&gt; v_b;

  v_s.push_back(s(1, 2.0));
  v_s.push_back(s(2, 3.1));
  v_s.push_back(s(3, 4.2));
  v_s.push_back(s(4, 5.3));

  std::transform(v_s.begin(), v_s.end(), std::back_inserter(v_a), std::mem_fun_ref(&amp;s::a));
  std::transform(v_s.begin(), v_s.end(), std::back_inserter(v_b), std::mem_fun_ref(&amp;s::b));

  std::copy(v_a.begin(), v_a.end(), std::ostream_iterator&lt;int   &gt;(std::cout, &quot; &quot;));
  std::cout &lt;&lt; '\n';
  std::copy(v_b.begin(), v_b.end(), std::ostream_iterator&lt;double&gt;(std::cout, &quot; &quot;));
  std::cout &lt;&lt; '\n';
}
</code></pre>
<p>Allerdings muss man, wenn man die Methoden a und b überlädt (etwa void a(int a_neu) und void b(double b_neu) einführt) von Hand auflösen, welches &amp;s::a bzw. &amp;s::b man meint (per static_cast, beispielsweise).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191574</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 14 Mar 2012 13:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Bereiche aus vector&amp;lt;struct&amp;gt; nach vector kopieren on Wed, 14 Mar 2012 14:11:24 GMT]]></title><description><![CDATA[<p>SvenStueck schrieb:</p>
<blockquote>
<p>ich habe eine struct in der art:</p>
<pre><code class="language-cpp">typedef struct{
 int a;
 double b;
}s;
</code></pre>
</blockquote>
<p>Du weißt, dass Du das in C++ auch ohne typedef aufschreiben kannst, ja?</p>
<p>SvenStueck schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector &lt;s&gt; v;
</code></pre>
<p>jetzt möchte ich die double-werte aus v in einen vector &lt;double&gt; v2 kopieren... gibts da eine angenehme lösung <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>Da gibt's viele Wege. Wenn Du selbst keine Schleife schreiben willst, könntest Du das über std::transform, einen back_inserter und boost::bind machen:</p>
<pre><code class="language-cpp">transform( svec.begin(), svec.end(),
           back_inserter(dvec),
           bind(&amp;s::b, _1) );
</code></pre>
<p>Edit: Oops! Das ist ja in etwa das, was seldon auch schon vorschlug. Das hatte ich übersehen...</p>
<p>Oder du könntest Dir per Boost zwei <code>transform_iterator</code> en erzeugen und die bei <code>vector&lt;double&gt;::assign</code> reinstecken.</p>
<p>Verwendest Du C++11, könnte man <code>bind</code> durch einen Lambda-Ausdruck ersetzen oder gleich die for-range Schleife nehmen, so wie es knivel gezeigt hat -- eventuell noch mit einem <code>dvec.reserve(svec.size())</code> vorher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191599</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 14 Mar 2012 14:11:24 GMT</pubDate></item></channel></rss>