起因是我想把一个向量中的数字输出到文件中显示出来,以前都是这样做的
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec(5);
for (int i = 0; i < 5; i++)
{
vec[i]=i;
}
ofstream outfile;
outfile.open("tt.txt");
if(!outfile)
{
cout<<"不能打开输出的文件!!!"<<endl;
return 0;
}
else{
for (int j = 0; j < 5; j++)
{
outfile<<vec[j]<<" ";
}
}
outfile.close();
return 0;
}
结果如下:
这里就顺便复习一下向量的初始化,可以有五种方式,举例说明如下:
(1) vector a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vector a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector a(b); //用b向量来创建a向量,整体复制性赋值
(4)vector a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)int b[7]={1,2,3,4,5,9,8};vector a(b,b+7); //从数组中获得初值
所以我就按照以前的方法输出向量
向量中存的是10000个0~9的数字,大概是这样
然后我就开始输出
ofstream outfile;
outfile.open("tt.txt",ios::binary);
if(!outfile)
{
cout<<"不能打开输出的文件!!!"<<endl;
return 0;
}
else{
for (int i = 0; i <number_of_test_images; i++)
{
cout << vec_test_labels[i]<<" ";
outfile<<vec_test_labels[i]<<" ";
}
}
结果是这样的
能打印出来,没有问题,然后我们打开文件来看看
为什么结果和想象的不一样??
以为是编码格式的问题,换个编码另存为一下,但是结果只是换了一种乱码而已/(ㄒoㄒ)/~~
看来问题应该是在程序上
换种输出方法试试,用迭代器输出
else{
vector<int>::iterator iter;
for( iter=vec_test_labels.begin();iter!=vec_test_labels.end();++iter)
{
outfile<<*iter<<" ";
}
}
结果依然乱码
然后就去问了同学,把代码给她,后来就解决了,然后我对比了一下改前和改后的代码,发现只有一个地方不同,如下
改前 outfile<<vec_test_labels[i]<<" ";
改后 outfile<<vec_test_labels[i]<<"\n ";
改后结果
问她为什么这样就不乱码了,她也不知道,只是习惯性加了‘\n’,为了输出好看,但是文件并没有输出一个数字就换一行。
就这个问题我去查了资料,但是并没有对这个现象的解释,好奇怪啊,如果有人知道,可以跟我解释一下吗?