gpt4 book ai didi

c++ - 如何使用range::actions::insd with std::vector

转载 作者:行者123 更新时间:2023-12-02 09:57:05 27 4
gpt4 key购买 nike

如果没有范围,则将元素插入 vector 看起来像这样:my_vec.insert(std::begin(my_vec), 0);
现在,我正在尝试对范围做同样的事情:

#include <range/v3/action/insert.hpp>
#include <iostream>
#include <vector>

int main() {
std::vector<int> input = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
for (auto x : ranges::actions::insert(input, 0, 0)) {
std::cout << x << " ";
}
std::cout << "\n";
}

而且我遇到了很多类似于以下内容的编译器错误:
lib/range-v3/include/range/v3/action/insert.hpp:243:18: note: candidate template ignored:
substitution failure [with Rng = std::__1::vector<int, std::__1::allocator<int> > &, I = int, T = int]:
no matching function for call to 'insert'
auto operator()(Rng && rng, I p, T && t) const

我也尝试过 ranges::actions::insert(input, {0, 0}),因为我看到以下重载:
auto operator()(Rng && rng, I p, std::initializer_list<T> rng2)

但这仍然行不通。我正在使用clang-9.0.0,并使用 -std=c++17标志进行编译。

最佳答案

首先,ranges::actions::insert(cont, pos, value)本质上调用cont.insert(pos, value),因此pos应该是迭代器,而不是整数值。

其次,ranges::actions::insert返回 insert_result_t ,这只是insert成员函数调用的结果:

template<typename Cont, typename... Args>
using insert_result_t = decltype(
unwrap_reference(std::declval<Cont>()).insert(std::declval<Args>()...));
std::vector::insert返回 std::vector::iterator,不能与基于范围的for一起使用。而是遍历 vector :
#include <range/v3/action/insert.hpp>
#include <iostream>
#include <vector>

int main() {
std::vector<int> input = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
ranges::actions::insert(input, input.begin(), 0); // input.begin() instead of 0
for (auto x : input) { // iterate over the vector
std::cout << x << " ";
}
std::cout << "\n";
}

( live demo)

关于c++ - 如何使用range::actions::insd with std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309301/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com