我想拼接范围[first, last]
,包括两个端点。我有元素的迭代器before first
and to last
。我可以用splice_after()
但仅限于线性时间。
我相信这种拼接可以在恒定时间内完成。我怎样才能做到这一点std::forward_list
?
如果问题不清楚,这里是显示我的问题的示例代码:
Code on 生活工作空间
#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;
}
Output:
before_first = 1, last = 4
Target after splice:
a 2 3 4 b c
Source after splice:
1