I want to combine the range of [first, last] , including both end points, inclusive. I have iterators to the first and last element. I could do this with splice_after() , but only in linear time.
I believe that this splicing can be done in constant time. How to do this with std::forward_list ?
If the question is not clear, here is an example code showing my problem:
Live Workspace Code
#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; }
Conclusion:
before_first = 1, last = 4 Target after splice: a 2 3 4 bc Source after splice: 1
source share