如何在不使用任何循环的情况下将 std::vector 或数组插入 std::forward_list?

How to insert std::vector or array to a std::forward_list without using any loop?

forward_list<int> listOne;
forward_list<int> listTwo;
vector<int> arr = {2,4,3};
forward_list<int>::iterator it;

在上面提到的代码中,我想在 listOne 中插入一个 std::vector,我尝试使用 insert_after 函数。


it = listOne.begin();
listOne.insert_after(it,arr);

但是没有用。

我想知道,有没有办法在 std::forward_list 中添加一个 std::vector 或数组而不用任何循环?

您可以使用 std::copystd::front_inserter

copy(arr.rbegin(), arr.rend(), front_inserter(listOne));

Working demo

如果您在构造时需要它,您可以将 begin() 和 end() 迭代器传递给 forward_list 构造函数:

std::vector<int> vec{1, 2, 3, 4, 5, 6};
std::forward_list<int> list{vec.cbegin(), vec.cend()};

I want to know that, is there a way to add a std::vector or std::array in a std::forward_list without any loop?

由于这个问题比较笼统,我想用 std::forward_list 本身给出所有可能的解决方案:

  1. 使用range constructor of the std::forward_list5

    std::vector<int> arr{ 1, 2, 4, 3 };
    std::forward_list<int> listOne{ arr.cbegin(), arr.cend() };
    
  2. 使用 assignment std::forward_list::operator=3(从传递的范围创建一个温度 std::initializer_list)!

    std::vector<int> arr{ 1, 2, 4, 3 };
    std::forward_list<int> listOne = { arr.cbegin(), arr.cend() };
    
  3. 要替换forward_list的内容,通过成员std::forward_list::assign()

    std::vector<int> arr{ 1, 2, 4, 3 };
    std::forward_list <int> listOne{ 11, 22 };
    listOne.assign(arr.cbegin(), arr.cend());  // replaces the  { 11, 22 }
    
  4. 通过成员std::forward_list::insert_after()

    在转发列表中的指定位置后插入元素
    std::vector<int> arr{ 1, 2, 4, 3 };
    std::forward_list <int> listOne{ 0 };
    // insert the arr after the first element
    listOne.insert_after(listOne.begin(), arr.cbegin(), arr.cend()); 
    

这里是demo of above all.