<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813917</guid>
        <pubDate>Thu, 31 Oct 2019 21:28:28 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813917</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813851'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-30T19:55:16+03:00">30.10.19, 16:55</time></span><div class='quote '>Переход на POD, думаю, для ТС будет одним из решений.</div></div><br>
я попробовал сделать тест - просто интересно.<br>
Два массива в стиле С (из некоторых структур) размером 24000000 итемов<br>
копируются друг в друга. Общий размер каждого - 750М.<br>
Истачена вся память компа, приблизительно 10-летней старости.<br>
Время копирования около 500-550 [мс].]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813851</guid>
        <pubDate>Wed, 30 Oct 2019 16:55:16 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813851</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813832'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-30T12:12:41+00:00">30.10.19, 12:12</time></span><div class='quote '>для POD</div></div><br>
Переход на POD, думаю, для ТС будет одним из решений.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813832</guid>
        <pubDate>Wed, 30 Oct 2019 12:12:41 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813832</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813749'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-10-29T18:34:29+00:00">29.10.19, 18:34</time></span><div class='quote '>Если он 100500 триллионов мегабайт то возможно.</div></div>Целевой вектор изначально пуст, не зря же третьим параметром идёт std::back_insert_iterator&lt;&gt;, поэтому вектор делает 100500 перераспределений. std::vector&lt;&gt;::reserve() решает проблему.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813750'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-29T18:49:37+00:00">29.10.19, 18:49</time></span><div class='quote '>да-да-да</div></div>std::copy() для POD и так способен сделать такую оптимизацию.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813750</guid>
        <pubDate>Tue, 29 Oct 2019 18:49:37 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813750</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813749'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-10-29T18:34:29+00:00">29.10.19, 18:34</time></span><div class='quote '>Можно попробовать простой тест - копировать массивы в стиле &quot;С&quot;<br>
указанного размера. Быстрее не будет. </div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813541'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-28T14:44:57+00:00">28.10.19, 14:44</time></span><div class='quote '>и использовать std::memcpy для копирования</div></div><br>
да-да-да  :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813749</guid>
        <pubDate>Tue, 29 Oct 2019 18:34:29 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813749</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813520'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>erslgoeirjh &#064; <time class="tag-quote__quoted-time" datetime="2019-10-28T12:03:25+00:00">28.10.19, 12:03</time></span><div class='quote '>... Этот вектор имеет 40 тысяч таких элементов.<br>
Я копирую содержимое вектора measuresvector в другой вектор measuresvector2, используя следующий код:<br>
<br>
Этот процесс копирования занимает 20 секунд.</div></div><br>
Что-то не так. &quot;Не верю&quot; &copy;<br>
20[c] = 20000[mc]<br>
20000 / 40000 = 0.5[mc]/объект.<br>
И каких же размеров объект ?&#33;&#33;<br>
Если он 100500 триллионов мегабайт то возможно.<br>
Но вообще скорость получилась невероятно медленная.<br>
---<br>
Можно попробовать простой тест - копировать массивы в стиле &quot;С&quot;<br>
указанного размера. Быстрее не будет.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813745</guid>
        <pubDate>Tue, 29 Oct 2019 17:56:18 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813745</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>jack128</strong>, тут штото нетак&#33; Но ТС не озвучивает предпосылов  :-?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813736</guid>
        <pubDate>Tue, 29 Oct 2019 17:17:41 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813736</link>
        <description><![CDATA[jack128: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813520'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>erslgoeirjh &#064; <time class="tag-quote__quoted-time" datetime="2019-10-28T12:03:25+00:00">28.10.19, 12:03</time></span><div class='quote '>Этот процесс копирования занимает 20 секунд.</div></div><br>
Либо ты на pentium 100Mgz этим копированием занимаешься, либо что то недоговариваешь. Например измерения в debug делаешь либо твоя структура или одно из её полей кастомный конструктор копирования имеет либо еще какая нить фигня. за 20 секунд не один гигабайт памяти скопировать можно.<br>
<br>
Да, а чем просто measuresvector2 = measuresvector не устраивает ??]]></description>
        <author>jack128</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813541</guid>
        <pubDate>Mon, 28 Oct 2019 14:44:57 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813541</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813520'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>erslgoeirjh &#064; <time class="tag-quote__quoted-time" datetime="2019-10-28T12:03:25+00:00">28.10.19, 12:03</time></span><div class='quote '> Какой код для этого следует использовать? </div></div><br>
Переработать &quot;хранилище&quot; источника и использовать <a class='tag-url' href='https://en.cppreference.com/w/cpp/string/byte/memcpy' target='_blank'>std::memcpy</a> для копирования в приемник - быстрее не получишь&#33;<br>
<br>
Но как говорится, есть нюанс. Как написал <strong class='tag-b'>Qraizer</strong> ...<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416178&view=findpost&p=3813521'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-28T12:21:41+00:00">28.10.19, 12:21</time></span><div class='quote '> P.S. Если нужно именно копирование</div></div><br>
Имеет смысл озвучить всю задачу. Очень часто бывает, что форумчанин выдумает себе не самое лучшее решение задачи, и тут же несется его оптимизировать. А оно ни в какую. Но всегда (или почти всегда) есть альтернативные решения, которые оч часто и проще, и лучше по всем параметрам. Попробуй спросить про это  :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813521</guid>
        <pubDate>Mon, 28 Oct 2019 12:21:41 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813521</link>
        <description><![CDATA[Qraizer: Попробуй перед копированием добавить<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">measuresvector2.reserve(measuresvector.size());</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-28T12:26:13+00:00">28.10.19, 12:26</time></span></span><br>
Если результат не устроит, то остаётся лишь пробовать оптимизировать конструктор Measure_Simulation. Кроме того, смущает, что в Measure_Simulation есть char*. Есть большое подозрение, что коли нет конструктора, адекватно обрабатывающий это поле, с ним будут проблемы.<br>
<br>
P.S. Если нужно именно копирование, то результат больше не улучшить. Но если достаточно будет перемещения, то нет необходимости в копировании с последующем разрушении оригинала, гораздо проще переместить:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">measuresvector2 = std::move(measuresvector);</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813520</guid>
        <pubDate>Mon, 28 Oct 2019 12:03:25 +0000</pubDate>
        <title>Копирование вектора (std::vector)</title>
        <link>https://forum.sources.ru/index.php?showtopic=416178&amp;view=findpost&amp;p=3813520</link>
        <description><![CDATA[erslgoeirjh: Есть некоторая структура Measure_Simulation, которая включает в себя достаточно много полей типа int, long, long double, char*, bool.<br>
И есть вектор (std::vector) measuresvector, каждый элемент которого относится к типу Measure_Simulation. Этот вектор имеет 40 тысяч таких элементов.<br>
Я копирую содержимое вектора measuresvector в другой вектор measuresvector2, используя следующий код:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::back_insert_iterator&#60;std::vector &#60;Measure_Simulation&#62; &#62; &nbsp;toV(measuresvector2);</div><div class="code_line">std::copy(measuresvector.begin(),measuresvector.end(),toV);</div></ol></div></div></div></div><br>
<br>
Этот процесс копирования занимает 20 секунд.<br>
<br>
Можно ли как-то сделать это копирование быстрее? Какой код для этого следует использовать?]]></description>
        <author>erslgoeirjh</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	