#include<iostream>
#include<vector>
#include<queue>
using namespace std;
class Solution
{
private:
vector<int> c(128,0); //编译报错
queue<char> q;
public:
//Insert one char from stringstream
void Insert(char ch)
{
++c[ch-'\0'];
if(c[ch-'\0']==1){
q.push(ch);
}
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
while(!q.empty()){
if(c[q.front()-'\0']==1) return q.front();
q.pop();
}
return '#';
}
};
int main(int argc,char **argv)
{
Solution sol;
sol.Insert('c');
char c=sol.FirstAppearingOnce();
cout<<c<<endl;
return 0;
}
上述代码第9行编译报错。原因是:在c++的类体中,方法以外的区域不允许有初始化,简单类型是可以的(例如int等简单类型变量,以及静态成员变量),但是有构造函数的复杂对象就不可以了(例如vector)。
vector有显示的构造函数,因此一个函数强制转换来调用其构造函数。在上述代码vector<int> c也可以理解成类的成员对象,类的成员对象初始化必须在类的构造函数中初始化。
网友评论