<?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=436670&amp;view=findpost&amp;p=3893360</guid>
        <pubDate>Thu, 27 Jul 2023 15:04:27 +0000</pubDate>
        <title>Односвязный список</title>
        <link>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893360</link>
        <description><![CDATA[gorbovsky: Привинтил итератор, оказалось и несложно, даже справка не потребовалась, компилятор все подсказал.<br>
dynarray.h<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">template &#60;class T&#62; class dynarray</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned len;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct elem</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;T* data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elem* next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem* first, * last;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inline bool is_empty() const</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return first == nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;//--------------------------------------------------------</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;class Iterator</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dynarray* obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator() : obj(nullptr), index(0) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator(dynarray* Obj, unsigned Index) : obj(Obj), index(Index) {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bool operator == (const Iterator val)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return index == val.index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator&amp; operator=(Iterator val)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = val.index;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;obj = val.obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bool operator !=(const Iterator val)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return(index != val.index);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator&amp; operator ++ ()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator operator++(int)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Iterator(obj, index);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;T* operator *()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (obj-&#62;operator[](index));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//--------------------------------------------------------</div><div class="code_line">public:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef void (*for_each_func) (T*);</div><div class="code_line">&nbsp;&nbsp; &nbsp;// for_each_func func;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int for_each(unsigned Begin, unsigned End, for_each_func Func) &nbsp; // &nbsp;for_each function</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int retval = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (; Begin &#60;= End; ++Begin)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Func(operator[](Begin));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;retval++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;dynarray() :first(nullptr), last(nullptr), len(0) {} &nbsp;// default constructor</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//--------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;Iterator begin() { return Iterator(this, 0); }</div><div class="code_line">&nbsp;&nbsp; &nbsp;Iterator end() { return Iterator(this, len); }</div><div class="code_line">&nbsp;&nbsp; &nbsp;//--------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned Length() const</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return len;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void push_back(T* obj) &nbsp;// &nbsp;push_back function</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (is_empty())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first-&#62;next = last;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first-&#62;data = obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;last-&#62;data = obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;last-&#62;next = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;last = last-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;T* operator[] (unsigned Index) const &nbsp; &nbsp;// operator [] function</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (is_empty())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Index &#62;= len)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Index == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elem* stack = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while (--Index);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return stack-&#62;data;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;T* Delete(const unsigned Index) &nbsp; &nbsp;// &nbsp;Delete element function</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (is_empty())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;T* retval = first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (len == 1) &nbsp; &nbsp; &nbsp; // only one element in array</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete last;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = last = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//last = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elem* temp = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Index == 0) &nbsp; &nbsp; // &nbsp;deleting first element</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = first-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elem* stack = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (unsigned i = 0; i &#60; Index; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;temp = stack-&#62;next-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;retval = stack-&#62;next-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;delete stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stack-&#62;next = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
main.cpp<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">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;#include &#60;iostream&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;#include &#60;algorithm&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dynarray&#60;userdata&#62; d;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto i = 0; i &#60; 10; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;d.push_back(new userdata(i));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for_each(d.begin(), d.end(), [](userdata* i) {cout &#60;&#60; i-&#62;get() &#60;&#60; &quot;,&quot;; });</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dynarray&#60;userdata&#62;::Iterator iter(&amp;d, 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto iter2(iter);</div><div class="code_line">&nbsp;&nbsp; &nbsp;iter2++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot; &nbsp; &quot; &#60;&#60; (*iter2)-&#62;get() &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto p : d) { cout &#60;&#60; p-&#62;get() &#60;&#60; &quot; ; &quot;; } // Прикольный for, не знал раньше, только итератор разыменовывает зачем- то</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>gorbovsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893320</guid>
        <pubDate>Wed, 26 Jul 2023 16:36:36 +0000</pubDate>
        <title>Односвязный список</title>
        <link>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893320</link>
        <description><![CDATA[gorbovsky: Победил.<br>
Косяк в методе push_back.<br>
<strong class='tag-b'>Majestio</strong> спасибо за труд.<br>
<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">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">struct userdata</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;int a;</div><div class="code_line">&nbsp;&nbsp; &nbsp;userdata ():a (0)</div><div class="code_line">&nbsp;&nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;int get () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return a;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;void set (const int val)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;a = val;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;class T&#62; class dynarray</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;unsigned len;</div><div class="code_line">&nbsp;&nbsp;struct elem</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;T *data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *next;</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;&nbsp;elem *first, *last;</div><div class="code_line">&nbsp;&nbsp;inline bool is_empty () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return first == nullptr;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;typedef void (*for_each_func) (T *);</div><div class="code_line">&nbsp;&nbsp;for_each_func func;</div><div class="code_line">&nbsp;&nbsp;int for_each (unsigned Begin, unsigned End, for_each_func Func) &nbsp; // &nbsp;for_each function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int retval = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (; Begin &#60;= End; ++Begin)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Func (operator[](Begin));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">dynarray ():first (nullptr), last (nullptr), len (0){} &nbsp;// default constructor</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;unsigned Length () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return len;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;void push_back (T * obj) &nbsp;// &nbsp;push_back function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;first = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first-&#62;next = last;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first-&#62;data = obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last-&#62;data=obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last-&#62;next=new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last=last-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;T *operator[] (unsigned Index) const &nbsp; &nbsp;// operator [] function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index &#62;= len)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *stack = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(--Index);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return stack-&#62;data;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;T *Delete (const unsigned Index) &nbsp; &nbsp;// &nbsp;Delete element function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T *retval=first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (len == 1) &nbsp; &nbsp; &nbsp; // only one element in array</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete last;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first =last= nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//last = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *temp=first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index == 0) &nbsp; &nbsp; // &nbsp;deleting first element</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;first=first-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; elem *stack=first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (unsigned i = 0; i &#60; Index; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;temp = stack-&#62;next-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval = stack-&#62;next-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack-&#62;next = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">int</div><div class="code_line">main ()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;dynarray &#60; userdata &#62; d;</div><div class="code_line">&nbsp;&nbsp;userdata *obj;</div><div class="code_line">&nbsp;&nbsp;for (auto i = 0; i &#60; 10; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;obj = new userdata;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;obj-&#62;set (i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;d.push_back (obj);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cout &#60;&#60; d[i]-&#62;get()&#60;&#60; endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;userdata *ud=d.Delete (0);</div><div class="code_line">&nbsp;delete d.Delete(d.Length()-1);</div><div class="code_line">for(auto i=0;i&#60;d.Length();++i)</div><div class="code_line">cout &#60;&#60; d[i]-&#62;get()&#60;&#60;endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Теперь как- то надо покурить на тему итератора к этому кадавру.]]></description>
        <author>gorbovsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893260</guid>
        <pubDate>Tue, 25 Jul 2023 09:25:19 +0000</pubDate>
        <title>Односвязный список</title>
        <link>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893260</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=436670&view=findpost&p=3893250'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>gorbovsky &#064; <time class="tag-quote__quoted-time" datetime="2023-07-24T22:51:49+00:00">24.07.23, 22:51</time></span><div class='quote '>Не могу понять что за засада.</div></div><br>
Немного подправил твой код, надеюсь не накосячил, лови-разбирайся:<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">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">// userdata - - -</div><div class="code_line">&nbsp;</div><div class="code_line">struct userdata {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int a;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;userdata(int i): a(i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int get() const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return a;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void set(const int val) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a = val;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;friend std::ostream&amp; operator&#60;&#60;(std::ostream&amp; os, const userdata&amp; obj) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;os &#60;&#60; obj.a &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return os;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">// dynarray - - -</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename T&#62; class dynarray {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned len;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;struct elem {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;T *data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem(T *init) : data(init) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elem *first, *last;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inline bool is_empty() const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return first == nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// default constructor</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dynarray(): len(0), first(nullptr), last(nullptr), func(nullptr) {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// default destructor</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;~dynarray() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (first) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;auto tmp = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete first-&#62;data; // нужно ли чистить данные или оставлять их висеть в памяти - я х3 чё надо</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = (first == last) ? nullptr : first-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete tmp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// operator [] function</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;T *operator[](const unsigned Index) const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (is_empty() || Index &#62;= len) return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;T *ret = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;auto tmp = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (unsigned i = 0; i &#60;= Index; ++i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (i == Index) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ret = tmp-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ret;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;for_each function</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;typedef void (*for_each_func)(T *);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for_each_func func;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int for_each(unsigned Begin, unsigned End, for_each_func Func) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int ret = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (End &#60;= len) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (; Begin &#60; End; ++Begin) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Func(operator[](Begin));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ret++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ret;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned Length() const {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return len;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;push_back function</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void push_back(T *obj) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *ins = new elem(obj);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *tmp = last;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (tmp == nullptr) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first = ins;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last = ins;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;first-&#62;next = last;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last-&#62;next = ins;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last = ins;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;Delete element function</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Delete(unsigned Index) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Index &#62;= len) return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *prev = &nbsp;nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *curr = &nbsp;first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (unsigned i = 0; i &#60;= Index; ++i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (i == Index) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (curr == first) first = (len &#62; 1) ? first-&#62;next : nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (curr == last) last = (len &#62; 1) ? prev : nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (prev) prev-&#62;next = curr-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete curr-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete curr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prev = curr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;curr = curr-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// For dump</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;friend std::ostream&amp; operator&#60;&#60;(std::ostream&amp; os, const dynarray&#60;T&#62;&amp; obj) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;os &#60;&#60; &quot;Current number of items: &nbsp;&quot; &#60;&#60; obj.Length() &#60;&#60; std::endl &#60;&#60; &quot;---------------------------------&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elem *tmp = obj.first;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (unsigned i = 0; i &#60; obj.Length(); ++i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;os &#60;&#60; &quot; &nbsp;&quot; &#60;&#60; *(tmp-&#62;data);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;os &#60;&#60; &quot;---------------------------------\nDone.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return os;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// создаем и печатаем пустой список</div><div class="code_line">&nbsp;&nbsp; &nbsp;dynarray &#60; userdata &#62; d;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// заполняем список 5-ю элементами и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto i = 0; i &#60; 5; ++i) d.push_back(new userdata(i));</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// печатаем второй элемент по индексу</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Item #2: &quot; &#60;&#60; *(d[2]) &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем нулевой элемент (из 5-ти) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем первый элемент (из 4-х) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем второй элемент (из 3-х) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем первый элемент (из 2-х) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем нулевой элемент (из 1-го) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Удаляем нулевой элемент (из пустого списка) и печатаем список</div><div class="code_line">&nbsp;&nbsp; &nbsp;d.Delete(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; d &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<a class='tag-url' href='https://onlinegdb.com/0eRrfjTsR' target='_blank'>Исполнение в онлайн компиляторе тут</a>.<br>
<br>
P.S. Метод <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Delete</span></span> я немного изменил, мне не нравится когда название одно, а от метода ждут еще чего-то. Удалить - значит удалить. А удалить из списка, но не удалять данные ... скорее всего лучше подходит название <span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class="tag-font" data-value="Courier" style="font-family:Courier">Shift</span></span>. Ну это так - мои заморочки. :scratch:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893250</guid>
        <pubDate>Mon, 24 Jul 2023 22:51:49 +0000</pubDate>
        <title>Односвязный список</title>
        <link>https://forum.sources.ru/index.php?showtopic=436670&amp;view=findpost&amp;p=3893250</link>
        <description><![CDATA[gorbovsky: Добрый день, уважаемые.<br>
Реализуем динамический массив на простом односвязном списке.<br>
При удалении нулевого элемента теряются данные, возможно ломается память.<br>
Не могу понять что за засада.<br>
онлайн компилятор <a class='tag-url' href='https://www.onlinegdb.com/' target='_blank'>https://www.onlinegdb.com/</a>, с++14<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">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">struct userdata</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;int a;</div><div class="code_line">&nbsp;&nbsp; &nbsp;userdata ():a (0)</div><div class="code_line">&nbsp;&nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;int get () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return a;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;void set (const int val)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;a = val;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;class T&#62; class dynarray</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;unsigned len;</div><div class="code_line">&nbsp;&nbsp;struct elem</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;T *data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *next;</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;&nbsp;elem *first, *last;</div><div class="code_line">&nbsp;&nbsp;inline bool is_empty () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return first == nullptr;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;typedef void (*for_each_func) (T *);</div><div class="code_line">&nbsp;&nbsp;for_each_func func;</div><div class="code_line">&nbsp;&nbsp;int for_each (unsigned Begin, unsigned End, for_each_func Func) &nbsp; // &nbsp;for_each function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int retval = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (; Begin &#60;= End; ++Begin)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Func (operator[](Begin));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">dynarray ():first (nullptr), last (nullptr), len (0){} &nbsp;// default constructor</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;unsigned Length () const</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return len;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;void push_back (T * obj) &nbsp;// &nbsp;push_back function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;first = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first-&#62;next = last;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first-&#62;data = obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *temp = new elem;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last-&#62;next = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last-&#62;data = obj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;T *operator[] (const unsigned Index) const &nbsp; &nbsp;// operator [] function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index &#62;= len)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *stack = first-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto i = 0; i &#60; Index; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (stack-&#62;next == nullptr)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return stack-&#62;data;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;T *Delete (unsigned Index) &nbsp; &nbsp;// &nbsp;Delete element function</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (is_empty ())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T *retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (len == 1) &nbsp; &nbsp; &nbsp; // only one element in array</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval = first-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete last;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;last = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Index == 0) &nbsp; &nbsp; // &nbsp;deleting first element</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval = first-&#62;data; &nbsp;// проблема где- то здесь, все остальное функционирует</div><div class="code_line">&nbsp;&nbsp; &nbsp;temp = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;first=first-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;elem *stack = first;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (unsigned i = 0; i &#60; Index; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;stack = stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;temp = stack-&#62;next-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;retval = stack-&#62;next-&#62;data;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete stack-&#62;next;</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack-&#62;next = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;len--;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return retval;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">int</div><div class="code_line">main ()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;dynarray &#60; userdata &#62; d;</div><div class="code_line">&nbsp;&nbsp;userdata *obj;</div><div class="code_line">&nbsp;&nbsp;for (auto i = 0; i &#60; 10; ++i)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;obj = new userdata;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;obj-&#62;set (i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;d.push_back (obj);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;userdata *ud=d.Delete (0);</div><div class="code_line">cout &#60;&#60; d[1]-&#62;get() &#60;&#60; endl; &nbsp;// &nbsp;Работает</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; d[0]-&#62;get (); &nbsp; &nbsp; &nbsp; // &nbsp;Падает</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>gorbovsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	