C++中类的私有成员-数组-输出异常,求指教

C++中类的私有成员-数组-输出错误,求指教
在编写GA算法的时候,定义了一个类名为Chromo().
问题:cout<<vecPopulation[i].genestr<<endl;是错误的,如果用for遍历输出为1100011011,则输

出为0036A418,不知道为什么。但是如果用for语句遍历输出是正确的。求指教。。。还有部分运行输出,稍后贴出。


我的目的就是初始化GA的初始种群的genestr为只含有0,1的串,方法是:1,初始为全0串,2,选择串长度内的一个随机数

字作为其中1的数目,3,不重复的选取数组的索引,将指定位置初始化为1。
部分类的定义如下
class Chromo
{
private:
int genestr[10];
};

vector<Chromo> vecPopulation;
vecPopulation.clear;
for (int i=0; i<popSize; i++)
{     

vecPopulation.push_back(Chromo());
//初始化基因链为全0串
for(int k=0;k<chromoLength;k++)
{vecPopulation[i].genestr[k]=0;out_test<<vecPopulation[i].genestr[k];}
out_test<<"初始化的基因链: "<<vecPopulation[i].genestr<<endl;

srand( (unsigned)time(NULL) );//srand()函数产生一个以当前时间开始的随机种子 
int min_gene=3;
int gene_num=min_gene+rand()%(chromoLength-min_gene+1);//被选择的基因的总数目,范围是

[1,chromoLength],被选择节点的最小数目需要修改,比如5
cout<<"基因位为1的总数目: "<<gene_num<<endl;
out_test<<"基因位为1的总数目: "<<gene_num<<endl;

int j=0;
while(j<gene_num)
{

int flag=1;//指定位置的数据设置为1,其他位置应该默认为0,待检查
srand( (unsigned)time(NULL) );
int gene_chosen=rand()%chromoLength;//被选择的基因位置,范围是[0,chromoLength)
if(vecPopulation[i].genestr[gene_chosen]==0)
{
cout<<gene_chosen<<endl;//输出检查被选择的基因位
out_test<<"被选择的基因位: "<<gene_chosen<<endl;

vecPopulation[i].genestr[gene_chosen]=flag; 
j++;
}

}
//直接输出cout<<vecPopulation[i].genestr<<endl;是错误的,如果用for遍历输出为1100011011,则输

出为0036A418,不知道为什么。

for(int m=0;m<10;m++)
cout<<vecPopulation[i].genestr[m];//输出这条染色体的基因链

cout<<vecPopulation[i].genestr<<endl;

out_test<<"生成的基因链: "<<endl;
for(int m=0;m<10;m++)
out_test<<vecPopulation[i].genestr[m];


}
------解决思路----------------------
数组作为参数调用operator<<时,有一个到指针类型的隐式转型,因此上调用的是operator<<(ostram&, int*)。对于指针类型的输出,标准库只对char *系统指针进行了特殊处理,把它们理解为字符串并输出文本内容,其它类型指针一律以16进制输入地址,而并不会输入数组内容。
要想输入数组内容,最简单的办法就是循环输出。
------解决思路----------------------
引用:
是只能循环输出数组的内容?如果使用cout语句就不能正确输出?那我还有一个疑问就是常见的输出,如int a[10];cout<<a;这个不是输出全部的数组内容么?这之间有何区别?


不可能。
除了用于&、sizeof等极少数操作符以外,其它任何时候使用一个数组时,它都会被隐式转型为指针类型,因此ostream::opreator<<无法知道数组的长度,不可能正确地输出完整的数组内容。