前天去金山笔试,出了4个题目。
考完以后出来,觉得比较简单的几个题目,似乎都做错了。
没抱什么希望的情况下,竟然叫我去面试,呵呵,结果仍旧是空欢喜一场!
我来说说题目吧,第一题就是一个简单的,MFC类库中的一个对象调用方法。
第二题,考察对指针变量,指针常量的sizeof,以及在类中字节对齐的知识点。
第三题,考察纠错能力。
第四题:
vector<int*>类型的变量,里面存储的是指针,他们需要我们手动来释放他们,比较麻烦,要求我们用SmartVector兼容vector,而且能够自己回收内存。
按道理,我认为似乎应该下面这样写,虽然考试的时候,我写错了格式,但是思路是:
应该要把指针类型弄个偏特化,毕竟不能对一个对象做delete吧。
现在改了下:
#include <iostream>
#include <vector>
using namespace std;template<class T>
class SmartVector:public vector<T>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
};template<class T>
class SmartVector<T*>:public vector<T*>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
~SmartVector()
{
while(size()!=0)
{
T* bk=back();
pop_back();
delete bk;
}
}
};
void func()
{
SmartVector<int*>svpi;
for(int i=0;i<5;i++)
{
int *p=new int;
svpi.push_back(p);
}
}
int main(int argc, char* argv[])
{
SmartVector<int>svi;
for(int i=0;i<5;i++)
svi.push_back(1);
func();
return 0;
}呵呵。昨天面试也认识2个朋友,一个已经成功进入今天面试。他是这样写的
但是似乎是正确答案(他说他可能对了 ):
template<class T>
class SmartVector<T>:public vector<T>
{
public:
SmartVector(){}
~SmartVector()
{
while(size()!=0)
{
T bk=back();
pop_back();
delete bk;
}
}
};不知道金山的答案如何哦。
考完以后出来,觉得比较简单的几个题目,似乎都做错了。
没抱什么希望的情况下,竟然叫我去面试,呵呵,结果仍旧是空欢喜一场!
我来说说题目吧,第一题就是一个简单的,MFC类库中的一个对象调用方法。
第二题,考察对指针变量,指针常量的sizeof,以及在类中字节对齐的知识点。
第三题,考察纠错能力。
第四题:
vector<int*>类型的变量,里面存储的是指针,他们需要我们手动来释放他们,比较麻烦,要求我们用SmartVector兼容vector,而且能够自己回收内存。
按道理,我认为似乎应该下面这样写,虽然考试的时候,我写错了格式,但是思路是:
应该要把指针类型弄个偏特化,毕竟不能对一个对象做delete吧。
现在改了下:
#include <iostream>
#include <vector>
using namespace std;template<class T>
class SmartVector:public vector<T>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
};template<class T>
class SmartVector<T*>:public vector<T*>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
~SmartVector()
{
while(size()!=0)
{
T* bk=back();
pop_back();
delete bk;
}
}
};
void func()
{
SmartVector<int*>svpi;
for(int i=0;i<5;i++)
{
int *p=new int;
svpi.push_back(p);
}
}
int main(int argc, char* argv[])
{
SmartVector<int>svi;
for(int i=0;i<5;i++)
svi.push_back(1);
func();
return 0;
}呵呵。昨天面试也认识2个朋友,一个已经成功进入今天面试。他是这样写的
但是似乎是正确答案(他说他可能对了 ):
template<class T>
class SmartVector<T>:public vector<T>
{
public:
SmartVector(){}
~SmartVector()
{
while(size()!=0)
{
T bk=back();
pop_back();
delete bk;
}
}
};不知道金山的答案如何哦。
======================================================
void func()
{
SmartVector<int*>svpi;
for(int i=0;i<5;i++)
{
int *p=new int;
svpi.push_back(p);
}
}
int main(int argc, char* argv[])
{
SmartVector<int>svi;
for(int i=0;i<5;i++)
svi.push_back(1);
func();
return 0;
}
======================================================
{
int a;
delete a;
return 0;
}
--------------------Configuration: 123 - Debug--------------------
Compiling source file(s)...
1.cpp
1.cpp: In function `int main()':
1.cpp:12: error: type `int' argument given to `delete', expected pointer123.exe - 1 error(s), 0 warning(s)
template<class T>
class SmartVector<T>:public vector<T>
{
public:
SmartVector(){}
~SmartVector()
{
while(size()!=0)
{
T bk=back();
pop_back();
delete bk;
}
}
};
void main()
{
SmartVector<int*>scpi;
SmartVector<int>sci;
for(int i=0;i<10;i++)
{
int n=i;
sci.push_back(n);
}
}
这可以吗?析构的时候没问题吗?
==========================================================
vector<int*>类型的对象,析构之前必须自己手动delete.
请设计一个类SmartVector兼容vector.能自己回收内存。
==========================================================
请问,不偏特化,直接在析构函数里加delete,那叫兼容vector???
如果是这样,那这题还考个屁啊?一共也就4题。我是觉得这个题唯一难的地方就是判断<>里面的是不是指针,是指针才delete,否则默认析构函数。
{
int a;
delete a;
return 0;
}程序可以这样写,我第一次发现。楼主强啊。
delete a;??这样可以写吗?
{
int a;
delete a;
return 0;
}程序可以这样写,我第一次发现。楼主强啊。=---------------------------------=朋友们,不要越扯越远好不好,一楼一楼的看,不要断章取义
内容是MFC+STL?!好没劲~~~~~~~~~~~~~~~~~~~~~~~~~
而不是写应用程序。题目要求只是写类。
class SmartVector
:public C
{
public:
~SmartVector()
{
std::for_each(begin(),end(),F());
}
};
typedef vector<int*> vector_i;
struct release
{
void operator()(int*p){delete p;}
};
typedef SmartVector<vector_i,release> SmartVector_i;
template<typename C,typename F>
class SmartVector
:public C
{
public:
~SmartVector()
{
std::for_each(begin(),end(),F());
}
};
typedef vector<int*> vector_i;
struct release
{
void operator()(int*p){delete p;}
};
typedef SmartVector<vector_i,release> SmartVector_i;
template<typename C,typename F>
class SmartVector
:public C
{
public:
~SmartVector()
{
std::for_each(begin(),end(),F());
}
};
typedef vector<int*> vector_i;
struct release
{
void operator()(int*p){delete p;}
};
typedef SmartVector<vector_i,release> SmartVector_i;