1. 分析一下这段程序的输出 (Autodesk)
class B
{
public:
B()
{
cout<<”default constructor”<}
~B()
{
cout<<”destructed”<}
B(int i):data(i)//B(int) works as a converter ( int -> instance ofB)
{
cout<<”constructed by parameter ” << data <}
private:
int data;
};
B Play( B b)
{
return b ;
}
(1)results:
int main(int argc, char* argv[])constructed by parameter 5
{destructedB(5)形参析构
B t1 = Play(5); B t2 = Play(t1);destructed t1形参析构
return 0;destructedt2 注意顺序!
}destructedt1
(2)results:
int main(int argc, char* argv[])constructed by parameter 5
{destructedB(5)形参析构
B t1 = Play(5); B t2 = Play(10);constructed by parameter 10
return 0;destructedB(10)形参析构
}destructedt2 注意顺序!
destructedt1
2. 写一个函数找出一个整数数组中,第二大的数(microsoft)
答案:
const int MINNUMBER = -32767 ;
int find_sec_max( int data[] , int count)
{
int maxnumber = data[0] ;
int sec_max = MINNUMBER ;
for ( int i = 1 ; i < count ; i++)
{
if ( data[i] > maxnumber )
{
sec_max = maxnumber ;
maxnumber = data[i] ;
}
else
{
if ( data[i] > sec_max )
sec_max = data[i] ;
}
}
return sec_max ;
}
3. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。
KMP算法效率最好,时间复杂度是O(n+m),详见:https://www.zhanglihai.com/blog/c_335_kmp.html
4. 多重继承的内存分配问题:
比如有class A : public class B, public class C {}
那么A的内存结构大致是怎么样的?
5. 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)
struct node { char val; node* next;}
bool check(const node* head) {} //return false : 无环;true: 有环
一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):
bool check(const node* head)
{
if(head==NULL)return false;
node *low=head, *fast=head->next;
while(fast!=NULL && fast->next!=NULL)
{
low=low->next;
fast=fast->next->next;
if(low==fast) return true;
}
return false;
}
相关文章推荐: