Wie kann man mit std :: forward_list in konstanter Zeit einen Entfernungsspleiß durchführen?

Ich möchte den Bereich spleißen[first, last]mit beiden Endpunkten inklusive. Ich habe Iteratoren zum ElementVor first und zulast. Ich könnte es mit machensplice_after() aber nur in linearer Zeit.

Ich glaube, dass dieser Spleiß in konstanter Zeit durchgeführt werden kann. Wie kann ich das machen mitstd::forward_list?

Wenn die Frage nicht klar ist, hier ein Beispielcode, der mein Problem zeigt:

Code einLive-Arbeitsbereich

#include <algorithm>
#include <forward_list>
#include <iostream>
#include <iterator>
using namespace std;

int main() {   
    forward_list<char> trg{'a','b','c'};
    forward_list<char> src{'1','2','3','4'};

    auto before_first = src.begin();
    auto last = find(src.begin(), src.end(), '4');
    cout << "before_first = " << *before_first << ", last = " << *last << "\n";

    // trg.splice(trg.begin(), src, before_first, last); // no such splice
    auto end = last;
    ++end; // Ouch! splice has to find last again although I already had it  :(
    trg.splice_after(trg.begin(), src, before_first, end);

    cout << "Target after splice:\n";
    copy(trg.begin(), trg.end(), ostream_iterator<char>(cout," "));

    cout << "\nSource after splice:\n";
    copy(src.begin(), src.end(), ostream_iterator<char>(cout," "));

    cout << endl;
}

Ausgabe:

before_first = 1, last = 4
Target after splice:
a 2 3 4 b c
Source after splice:
1 

Antworten auf die Frage(1)

Ihre Antwort auf die Frage