C++ 根据条件将元素从一个转发列表转移到另一个转发列表
我有两个正向列表:C++ 根据条件将元素从一个转发列表转移到另一个转发列表,c++,c++11,forward-list,C++,C++11,Forward List,我有两个正向列表:list1和list2。我想迭代第一个元素,并根据条件将元素转移到第二个元素。下面是一个使用forward\u list的示例,它不起作用,但我认为它表达了我想要的内容 #include <iostream> #include <forward_list> using namespace std; int main(void) { forward_list<int> list1 = {1, 2, 3, 4, 5, 6};
list1
和list2
。我想迭代第一个元素,并根据条件将元素转移到第二个元素。下面是一个使用forward\u list
的示例,它不起作用,但我认为它表达了我想要的内容
#include <iostream>
#include <forward_list>
using namespace std;
int main(void)
{
forward_list<int> list1 = {1, 2, 3, 4, 5, 6};
forward_list<int> list2;
//Transfer elements between 2 and 5 from list1 to list2.
forward_list<int>::const_iterator iter_before = list1.before_begin();
forward_list<int>::const_iterator iter = list1.begin();
while ( iter != list1.end())
{
int item = *iter;
cout << item ;
if (2 <= item && item <= 5 )
{
list2.splice_after(list2.before_begin(),list1,iter_before);
iter_before = iter;
iter++;
cout << "! "; // Indicates if current item is transferred.
}
else
{
iter++;
iter_before++;
cout << " ";
}
}
cout << "\nList 1: ";
for (auto item : list1)
{
cout << item << " ";
}
cout << "\nList 2: ";
for (auto item : list2)
{
cout << item << " ";
}
cout << endl;
return 0;
}
#包括
#包括
使用名称空间std;
内部主(空)
{
前向列表列表1={1,2,3,4,5,6};
转发列表2;
//将2和5之间的元素从列表1传输到列表2。
forward_list::const_迭代器iter_before=list1.before_begin();
转发列表::常量迭代器iter=list1.begin();
while(iter!=list1.end())
{
国际热核实验堆;
你的答案能否准确地描述STLcopy_if
()的用例。诀窍在于认识到:
您需要获得一个迭代器,该迭代器指向要拼接到另一个列表中的元素,并且必须在拼接之前进行。拼接之后,该迭代器将指向要处理的下一个元素
拼接后,iter\u before
仍然指向下一个待处理元素的正前方-无需更改它
因此,在您的if
中,请改为:
auto iter_next = std::next(iter);
list2.splice_after(list2.before_begin(),list1,iter_before);
iter = iter_next;
.我有我在文章末尾尝试过的方法。我认为主要问题是使用splice\u after()后指向list1
的迭代器重新映射到list2
的方式
。谢谢您的回答!但是如果不能完全满足我的需要,请复制。\n我希望list1
在传输完成后不包含元素。