起因是我想把一个向量中的数字输出到文件中显示出来,以前都是这样做的
#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’,为了输出好看,但是文件并没有输出一个数字就换一行。
就这个问题我去查了资料,但是并没有对这个现象的解释,好奇怪啊,如果有人知道,可以跟我解释一下吗?