gpt4 book ai didi

c++ - C++ 中的容器和运算符

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:13 26 4
gpt4 key购买 nike

我被要求实现一个返回集合的简单算法。它接收一个容器(STL)和一个实现二进制 () 运算符的对象。该运算符接收两个容器并返回一个 bool 值。返回的集合将包含遵循某些规则的原始容器的每个元素。所以我的算法看起来像这样:

template<typename Container, typename T, typename Object>
std::set<T> algo(Container<T>& con, Object obj) {
std::set<T> out;
std::vector<T> one;
std::vector<T> two;
bool flag_passed_x = false;

for (typename Container::iterator i = con.begin(); i != con.end(); ++i) {
one.clear();
two.clear();
for (typename Container::iterator j = con.begin(); j != con.end();
++j) {
// split the container
if (i == j)
flag_passed_x = true;

if (!flag_passed_x)
one.insert(*j);
else
two.insert(*j);
}
if (obj(one, two)) {
out.insert(*i);
}
}

return out;
}

我还尝试通过创建实现运算符 () 的 Kuku 类并向该算法发送一个包含数字 0-9 的 vector 来实现测试。

template<typename Container>
class Kuku {
bool operator()(const Container& low, const Container& high) {
for(typename Container::iterator i = low.begin(); i != low.end(); ++i) {
for(typename Container::iterator j = high.begin(); j != high.end(); ++j) {
if ((int) *j > (int) *i)
return false;
}
}

return true;
}
};

尝试调用它:

int main(){
std::vector<int> v;
Kuku<std::vector<int>> kik;

for (int i = 0; i < 10; i++)
v.push_back(i);

line 58 ---> std::set<int> a = algo(v, kik);
return 0;
}

但我遇到了无法摆脱的错误:

Description Resource    Path    Location    Type
no matching function for call to 'algo(std::vector<int>&, Kuku<std::vector<int> >&)' a.cpp /dry4 line 58 C/C++ Problem

Description Resource Path Location Type
Invalid arguments '
Candidates are:
std::set<#1,std::less<#1>,std::allocator<#1>> algo(#0 &, #2)
' a.cpp /dry4 line 58 Semantic Error

最佳答案

你的代码充满了错误

您忽略了实际遇到的第一个错误:

error: 'Container' is not a template
std::set<T> algo(Container<T>& con, Object obj)

您可以通过修改模板参数来解决此问题:

template<template<class...> class Container, typename T, typename Object>
std::set<T> algo(Container<T>& con, Object obj) {

接下来,你尝试insert进入vectors有一个值。使用 push_back相反:

if (!flag_passed_x)
one.push_back(*j);
else
two.push_back(*j);

接下来,您的 Container 有一个不完整的迭代器声明.您需要将其限定为 Container<T>::iterator

for (typename Container<T>::iterator i = con.begin(); i != con.end(); ++i) {
// ...
for (typename Container<T>::iterator j = con.begin(); j != con.end();

接下来,您不公开 Kukuoperator()作为公开:

template<typename Container>
class Kuku {
public:
bool operator()

接下来,您无意中尝试从 const 中获取普通迭代器容器而不是 const_iterator :

for(typename Container::const_iterator i = low.begin(); i != low.end(); ++i) {
for(typename Container::const_iterator j = high.begin(); j != high.end(); ++j) {

Demo

关于c++ - C++ 中的容器和运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743544/

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