我想在这里讨论一个我在数据结构书中找到的算法.本书提供了算法的草图,以便在大小为N的数组中找到多数元素(出现多于N/2).算法草图如下:
首先,找到候选多数元素(这是更难的部分).这个候选人是唯一可能成为多数元素的元素.第二步确定这个候选人是否实际上是多数.这只是对数组的顺序搜索.要在数组中找到候选项A,形成第二个数组B.然后比较A1,A2.如果它们相等,则将其中一个添加到B; 否则什么也不做.然后比较A3和A4.如果它们相等,再将其中一个添加到B; 否则什么也不做.以这种方式继续,直到读取整个数组.然后递归地找到B的候选者; 这是A的候选人.
我想出如果N是偶数,算法工作正常.但如果N是奇数怎么办?我们如何处理这个案子?
在多重继承中,我有一个Base由 classA和 class继承的虚拟类B。A并且B是 的基类AB。请看下面的代码。在Aand 的构造函数中B,Base(string)构造函数被调用。我期待得到以下输出:
Base::Base(std::string)
A::A()
B::B()
Run Code Online (Sandbox Code Playgroud)
但我得到以下输出:
Base::Base()
A::A()
B::B()
Run Code Online (Sandbox Code Playgroud)
为什么Base会调用默认构造函数?
#include<iostream>
#include<string>
using namespace std;
class Base{
public:
Base(){
cout<<__PRETTY_FUNCTION__<<endl;
}
Base(string n):name(n){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string name;
};
class A : public virtual Base {
public:
A():Base("A"){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string name;
};
class B : public virtual Base {
public:
B():Base("B"){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string …Run Code Online (Sandbox Code Playgroud) 我试图使用用户定义的类'A'与模板std :: less.我还有一个函数重写<操作符std::less.此代码未编译.
#include<iostream>
#include<functional>
using namespace std;
class A{
public:
A(int x=0):a(x){}
int a;
bool operator<(const A& ref){
return a<ref.a;
}
};
int main()
{
A a1(1);
A a2(2);
std::less<A> comp;
if( comp(a1,a2)){
cout<<"less"<<endl;
}
else{
cout<<"more"<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)