gpt4 book ai didi

c++ - 使用一个函数对两个不同的 vector (每个 vector 都有 "active"bool)进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:28 27 4
gpt4 key购买 nike

我创建了具有 ACTIVE BOOL 的基类

class BaseTest{
public:
bool active = false;

BaseTest(){
// make most true
if ( getRand(0, 5) != 2){
active = true;
}
}
};

创建两个不同的子类

class ChildTest_1: public BaseTest{

string child1 = "Is child 1";

public:

ChildTest_1(){

}
};

class ChildTest_2: public BaseTest{

string child2 = "Is NOT child 1";

public:

ChildTest_2(){

}

};

我希望能够将任一子项(或任何带有“ACTIVE”的 vector )传递给此函数,它将返回第一个非事件的。我有一个运行许多对象的大量 vector 的程序,并且通常有一个管理每个对象 vector 的类。在每个 mgmt 类中编写此循环正在成为重复代码的痛苦和浪费。我想要一个我可以传递任何 vector 的 vector ,该 vector 包含带有事件变量的对象。

我现在不需要排序,但这是最接近我需要的术语。

我需要的是一个可以传递 vector 的函数,它会返回第一个非事件对象;

如果他们不需要共享一个基类就更好了因为 vector 中的每个对象都有自己的 ACTIVE bool,但我也可以创建一个简单的基类,所有对象都将派生自该基类。

int firstInactive(vector<BaseTest> & test ){

for ( int cnt = 0 ; cnt < test.size() ; cnt++ ){

if (!test[cnt].active){

cout << cnt << " Is inactive " <<endl;

// add actual sorting here if I need;

return cnt;
}

}

}



int main(int, char const**){



vector< ChildTest_1 > allTest1;

vector< ChildTest_2 > allTest2;


allTest1.resize(10);

allTest2.resize(10);



cout << "First inactive in alltest1 is " << firstInactive(allTest1) <<endl;

cout << "First inactive in alltest2 is " << firstInactive(allTest2) <<endl;

// as expected it says no known matching function call.

return 0 ;

}

我已经搜索和试验了几天。我已经阅读了有关多态性和模板的所有内容,但找不到对我有帮助的示例。

最佳答案

您可以使用模板(不需要基类):

template <typename T>
auto firstInactive(const std::vector<T>& v)
// -> typename std::vector<T>::const_iterator // for c++11
{
return std::find_if(v.begin(), v.end(), [](const T& e) { return !e.active; });
}

并调用它:

std::vector<ChildTest_1> allTest1(10);
std::vector<ChildTest_2> allTest2(10);

auto it1 = firstInactive(allTest1);
auto it2 = firstInactive(allTest2);

if (it1 != allTest1.end()) {
std::cout << "First inactive in alltest1 is "
<< std::distance(allTest1.cbegin(), it1) << std::endl;
}
if (it2 != allTest2.end()) {
std::cout << "First inactive in alltest2 is "
<< std::distance(allTest2.cbegin(), it2) << std::endl;
}

Demo

关于c++ - 使用一个函数对两个不同的 vector (每个 vector 都有 "active"bool)进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39600337/

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