如何解决std::ranges::copy 将不接受 Visual Studio 中的 std::vector
下面的代码不能在 Visual Studio 中编译,给出
错误 C2672 'operator __surrogate_func': 找不到匹配的重载函数 sortms C:\Users\David\source\repos\sortms\sortms.cpp 103
当我使用 C 风格的数组时,该函数按编写的方式工作。如果我使用指定 input.begin(),input.end(),output.begin()
的注释代码,该函数也有效。
我使用的是 Visual Studio Community 2019 v16.8.6,使用 /std:c++latest
选项进行编译。我认为标准容器是基于范围的?
在处理向量或其他标准容器时,有人可以帮助我更好地理解 std::range::copy()
与 std::copy()
的优势吗?
#include <iostream>
#include <ranges>
#include <algorithm>
#include <array>
#include <utility>
#include <vector>
#include <functional>
#include <string>
#include <concepts>
void ranges_copy_demo()
{
std::cout << "\nstd::ranges::copy()\n";
/*
int const input[] = { 1,2,3,5,8,13,21,34,45,79 };
int output[10] = { 0 };
*/
std::vector<int> input = { 1,79 };
std::vector<int> output(10,0);
// auto r1 = std::ranges::copy(input.begin(),output.begin());
auto r1 = std::ranges::copy(input,output);
print_range("copy output",output,r1);
// copy number divisible by 3
// auto r2 = std::ranges::copy_if(input.begin(),output.begin(),[](const int i) {
auto r2 = std::ranges::copy_if(input,[](const int i) {
return i % 3 == 0;
});
print_range("copy_if %3 output",r2);
// copy only non-negative numbers from a vector
std::vector<int> v = { 25,15,-5,-15 };
// auto r3 = std::ranges::copy_if(v.begin(),v.end(),[](const int i) {
auto r3 = std::ranges::copy_if(v,[](const int i) {
return !(i < 0);
});
print_range("copy_if !(i < 0) output",r3);
}
解决方法
因为其他人可能会和我一样陷入同样的心理陷阱。以下适用于 c 样式数组或 std::container
auto r1 = std::ranges::copy(input,std::begin(output));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。