<?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[Basis eines Vectors ändern]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir jemand sagen, ob man die Basis eines STL-Vectors ändern kann (wie es bei Boost-Multiarray mit boost::multi_array_types::extent_range möglich ist)?</p>
<p>Falls das nicht geht: Wie bekommt man dann Vektoren mit Basis ungleich 0?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266603/basis-eines-vectors-ändern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 00:46:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266603.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 May 2010 13:13:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Basis eines Vectors ändern on Tue, 11 May 2010 13:13:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir jemand sagen, ob man die Basis eines STL-Vectors ändern kann (wie es bei Boost-Multiarray mit boost::multi_array_types::extent_range möglich ist)?</p>
<p>Falls das nicht geht: Wie bekommt man dann Vektoren mit Basis ungleich 0?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895726</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Tue, 11 May 2010 13:13:20 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Tue, 11 May 2010 13:16:32 GMT]]></title><description><![CDATA[<p>Sowas ist nicht möglich bei <code>std::vector</code> .</p>
<p>ingobulla schrieb:</p>
<blockquote>
<p>Falls das nicht geht: Wie bekommt man dann Vektoren mit Basis ungleich 0?</p>
</blockquote>
<p>Indem du einen Offset speicherst? Könntest zum Beispiel die Klasse <code>std::vector</code> kapseln.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895727</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 11 May 2010 13:16:32 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Tue, 11 May 2010 15:15:39 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Indem du einen Offset speicherst? Könntest zum Beispiel die Klasse <code>std::vector</code> kapseln.</p>
</blockquote>
<p>Gibt es da gar keine Standardlösung (in der Boost wurde ich nicht fündig)?</p>
<p>Das Problem scheint mir doch sehr elementar und ich möchte ungern etwas selber schreiben und dann irgendwann feststellen, dass es das Ganze schon irgendwo einigermaßen standartisiert gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895820</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Tue, 11 May 2010 15:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Tue, 11 May 2010 15:20:37 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Das Problem scheint mir doch sehr elementar ...</p>
</blockquote>
<p>Wie bitte? Elementar? Es ist simpel vielleicht, aber definitiv nicht elementar. Sowas braucht man nur in Spezialfällen und vor allem ist es nicht die Aufgabe eines Containers, eine solche Funktionalität anzubieten.<br />
Wozu brauchst du es denn?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895824</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 11 May 2010 15:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Tue, 11 May 2010 15:25:53 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Gibt es da gar keine Standardlösung (in der Boost wurde ich nicht fündig)?</p>
<p>Das Problem scheint mir doch sehr elementar und ich möchte ungern etwas selber schreiben und dann irgendwann feststellen, dass es das Ganze schon irgendwo einigermaßen standartisiert gibt.</p>
</blockquote>
<p>Hm.... mir fällt jetzt nichts ein, warum ich das täglich brauchen würde, wieso kommst du auf die Idee, das sei ein Problem für das es eine Standardlösung geben muss? Was hast du denn genau vor, vielleicht gibt´s da einen anderen Ansatz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895828</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 11 May 2010 15:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Wed, 12 May 2010 08:12:09 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Hm.... mir fällt jetzt nichts ein, warum ich das täglich brauchen würde, wieso kommst du auf die Idee, das sei ein Problem für das es eine Standardlösung geben muss? Was hast du denn genau vor, vielleicht gibt´s da einen anderen Ansatz?</p>
</blockquote>
<p>Nach meinem Empfinden kommt das in der Bioinformatik häufiger vor.</p>
<p>Z. B. wenn man Pseudocode für einen Algorithmus hat (von einem Dritten), den man implementieren will, und dort mit Basis 1 gearbeitet wird. Man möchte ja, dass Pseudocode und C++-Code möglichst ähnlich sind (insbesondere will man, wenn man beide zusammen anschaut, nicht ständig im Kopf den Basiswechsel durchführen).</p>
<p>Bei mir jetzt konkret ist es was anderes: Ich habe in meinem Programm eine Genomsequenz (für Fachfremde: das ist abstrakt betrachtet einfach ein String) und möchte eine (eigene) Funktion auf - sagen wir - Position 1000 bis 2000 anwenden. Diese Funktion verwendet ein 1-dim. Array dessen Index der Position entspricht (im wesentlichen bildet das Array jede Position auf einen Integer ab). Da würde ich auch gerne die durch das Problem kanonisch gegebene Indizierung von 1000 bis 2000 verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896089</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 12 May 2010 08:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Wed, 12 May 2010 08:26:59 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Z. B. wenn man Pseudocode für einen Algorithmus hat (von einem Dritten), den man implementieren will, und dort mit Basis 1 gearbeitet wird. Man möchte ja, dass Pseudocode und C++-Code möglichst ähnlich sind (insbesondere will man, wenn man beide zusammen anschaut, nicht ständig im Kopf den Basiswechsel durchführen).</p>
</blockquote>
<p>Ehm, wie bitte? Du verkomplizierst deinen C++ Code, damit er mit Pseudo-Code übereinstimmt? &lt;lang-gezogen&gt;ok&lt;/lang-gezogen&gt;</p>
<p>ingobulla schrieb:</p>
<blockquote>
<p>Bei mir jetzt konkret ist es was anderes: Ich habe in meinem Programm eine Genomsequenz (für Fachfremde: das ist abstrakt betrachtet einfach ein String) und möchte eine (eigene) Funktion auf - sagen wir - Position 1000 bis 2000 anwenden. Diese Funktion verwendet ein 1-dim. Array dessen Index der Position entspricht (im wesentlichen bildet das Array jede Position auf einen Integer ab). Da würde ich auch gerne die durch das Problem kanonisch gegebene Indizierung von 1000 bis 2000 verwenden.</p>
</blockquote>
<p>Wäre dazu nicht eher das Iteratoren- oder Range-Konzept geeignet? Du kannst zum Beispiel alle Algorithmen aus der Standardbibliothek auf einen kleineren Bereich eines Containers anwenden, ohne die Basis zu wechseln.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896096</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 12 May 2010 08:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Wed, 12 May 2010 10:23:21 GMT]]></title><description><![CDATA[<p>Dann bau dir doch einfach einen Wrapper, der den string/vector/was auch immer umschliesst und intern eine Offsetkorrektur durchführt. Ob das allerdings praktikabel und notwendig ist ... das soll der Bioinformatiker entscheiden :p<br />
Spätestens bei Iteratoren wird´s etwas unübersichtlich...</p>
<p>Edit:<br />
Obwohl... die Iteratoren müssen ja nicht angefasst werden, da begin()/end() immer den Anfang oder das Ende kennzeichnen... hab´s mal ergänzt. Da fehlen jetzt natürlich immer noch einige Methoden, um vollständige Transparenz zu implementieren (size/empty/clear/etc.), ob das den Aufwand wirklich wert ist, nur um Konformität mit einem PSEUDO-CODE zu erreichen...</p>
<pre><code class="language-cpp">class StringView
{
	std::string&amp; 	Data_;
	std::size_t 	Offset_;

public:
   StringView( std::string&amp; Data ) :
      Data_( Data ), Offset_( 0 )
   {
   }

   StringView( std::string&amp; Data, std::size_t Offset ) :
      Data_( Data ), Offset_( Offset )
   {
   }

   std::string::reference operator[]( size_t Index )
   {
      return Data_[Index + Offset_];
   }

   std::string::const_reference operator[]( size_t Index ) const
   {
      return Data_[Index + Offset_];
   }

   std::string::iterator begin()
   {
      return Data_.begin();
   }

   std::string::const_iterator begin() const
   {
      return Data_.begin();
   }

   std::string::iterator end()
   {
      return Data_.end();
   }

   std::string::const_iterator end() const
   {
      return Data_.end();
   }
};

int main()
{
   std::string sequence = &quot;1234567890&quot;;

   // Offset von -1 simuliert 1-basierten Zugriff
   StringView view( sequence, -1 );

   char c0 = view[1];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1896128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896128</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 12 May 2010 10:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Wed, 12 May 2010 12:25:25 GMT]]></title><description><![CDATA[<p>Ich habe sowas noch nie gebraucht. Ich kann mir auch nicht vorstellen, warum das so nützlich sein sollte. Pseudo-Code-Kompatibilität sehe ich jedenfalls nicht als guten Grund an... <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>Ich würde mir wenn überhaupt ein einzelnes (bzw. zwei, mit <code>const</code> -Überladung) freies Funktionstemplate schreiben, das einen verschobenen Zugriff ermöglicht. Eine ganze Wrapper-Klasse zu schreiben scheint mir übertrieben, ausserdem schränkt es die Flexibilität ein.</p>
<p>Warum eigentlich &quot;Basis&quot;? Mir ist als erstes die Basis eines Vektorraums in den Sinn gekommen, und dann habe ich gedacht, du könntest die Dimension (Anzahl Verschachtelungen) meinen. Jedenfalls ist mir erst aufgrund der anderen Beiträge klar geworden, worum es sich handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896209</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 12 May 2010 12:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Basis eines Vectors ändern on Wed, 12 May 2010 13:39:22 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Warum eigentlich &quot;Basis&quot;?</p>
</blockquote>
<p>Den Begriff &quot;Basis&quot; hab ich von hier (eingedeutscht): <a href="http://www.boost.org/doc/libs/1_38_0/libs/multi_array/doc/user.html#sec_base" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/libs/multi_array/doc/user.html#sec_base</a></p>
<p>Daher kommt auch meine Annahme, ich sei nicht der einzige, der sowas braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1896254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1896254</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Wed, 12 May 2010 13:39:22 GMT</pubDate></item></channel></rss>