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)形參析構(gòu)
B t1 = Play(5); B t2 = Play(t1);destructed t1形參析構(gòu)
return 0;destructedt2 注意順序!
}destructedt1
(2)results:
int main(int argc, char* argv[])constructed by parameter 5
{destructedB(5)形參析構(gòu)
B t1 = Play(5); B t2 = Play(10);constructed by parameter 10
return 0;destructedB(10)形參析構(gòu)
}destructedt2 注意順序!
destructedt1
2. 寫一個函數(shù)找出一個整數(shù)數(shù)組中,第二大的數(shù)(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)第一個位置的函數(shù)。
KMP算法效率最好,時間復(fù)雜度是O(n+m),詳見:https://www.zhanglihai.com/blog/c_335_kmp.html
4. 多重繼承的內(nèi)存分配問題:
比如有class A : public class B, public class C {}
那么A的內(nèi)存結(jié)構(gòu)大致是怎么樣的?
5. 如何判斷一個單鏈表是有環(huán)的?(注意不能用標(biāo)志位,最多只能用兩個額外指針)
struct node { char val; node* next;}
bool check(const node* head) {} //return false : 無環(huán);true: 有環(huán)
一種O(n)的辦法就是(搞兩個指針,一個每次遞增一步,一個每次遞增兩步,如果有環(huá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;
}
相關(guān)文章推薦: