注册 登录
编程论坛 C++教室

[求助]如何反向输出vector

ichigo 发布于 2007-08-02 15:22, 3117 次点击

//: C02:Fillvector.cpp
// Copy an entire file into a vector of string
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in("Fillvector.cpp");
string line;
while (getline(in, line))
v.push_back(line); // Add the line to the end
// Add line numbers;
for(int i = 0; i < v.size(); i++)
cout << i << ": " << v[i] << endl;
} ///:~


在书上看到这个例子
题目是修改Fillvector.cpp使他能从后向前打印各行
如果用for递减,从末尾向开头输出,出现错误
我知道如果换一个容器可能就可以了
但是还是需求一下使用vector反向输出的方法
或者从最后一行开始反过来存入vector
谢谢大家帮忙

[此贴子已经被作者于2007-8-2 15:23:16编辑过]

15 回复
#2
medicihophy2007-08-02 16:33

#include <string>
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in("Fillvector.cpp");
string line;
while (getline(in, line))
v.push_back(line);
for(int i = v.size()-1; i>=0; i--)
cout << i << ": " << v[i] << endl;
}
原来的代码纯粹是搞笑就给改了!楼主的问题好像不存在哦!不知道是啥问题?

[此贴子已经被作者于2007-8-2 17:20:58编辑过]

#3
medicihophy2007-08-02 16:37

其实vector就是个多功能数组

[此贴子已经被作者于2007-8-2 17:21:56编辑过]

#4
aipb20072007-08-02 16:38
最好用迭带器
#5
ichigo2007-08-02 16:45
多谢~~~~~~~~
想问个问题,函数res起了什么作用..我有点没明白,只知道有个递归
最后输出好象是把vector从最末的一元素最先输出,为什么我直接反过来输出不行呢
#6
medicihophy2007-08-02 16:49

VC里只是警告而已,可以运行,当然不太规范,但在.Net或比较高版本里的应该是被看成错误!

[此贴子已经被作者于2007-8-3 20:06:58编辑过]

#7
ichigo2007-08-02 16:53
明白了,谢谢
#8
ichigo2007-08-02 16:53
以下是引用aipb2007在2007-8-2 16:38:20的发言:
最好用迭带器

给个具体点的...

#9
medicihophy2007-08-02 17:19

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in("Fillvector.cpp");
string line;
while (getline(in, line))
v.push_back(line);
for(int i = v.size()-1; i>=0; i--)
cout << i << ": " << v[i] << endl;
}
才发现我是多此一举,可以直接倒着输出啊

#10
HJin2007-08-03 10:02

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in(__FILE__);
string line;
while (getline(in, line))
v.push_back(line);

int i=v.size();
for(vector<string>::const_reverse_iterator it=v.rbegin(); it!=v.rend(); ++it)
cout << i-- << ": " <<*it << endl;

return 0;
}

#11
ichigo2007-08-03 12:04
以下是引用medicihophy在2007-8-2 17:19:18的发言:

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in("Fillvector.cpp");
string line;
while (getline(in, line))
v.push_back(line);
for(int i = v.size()-1; i>=0; i--)
cout << i << ": " << v[i] << endl;
}
才发现我是多此一举,可以直接倒着输出啊

怪了...我也这么写的..可是就不行啊...
我写的是for( int i = v.size(); i>0; i--)

#12
ichigo2007-08-03 12:13
以下是引用HJin在2007-8-3 10:02:19的发言:

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
vector<string> v;
ifstream in(__FILE__);
string line;
while (getline(in, line))
v.push_back(line);

int i=v.size();
for(vector<string>::const_reverse_iterator it=v.rbegin(); it!=v.rend(); ++it)
cout << i-- << ": " <<*it << endl;

return 0;
}


Thanks

#13
zhoujicai5552007-08-03 14:53
回复:(ichigo)[求助]如何反向输出vector
谢谢!

[此贴子已经被作者于2007-8-3 14:54:09编辑过]


#14
hzdz2007-08-03 19:47
rbegin和begin有什么区别?
同问rend和end
#15
aipb20072007-08-03 23:25
以下是引用hzdz在2007-8-3 19:47:53的发言:
rbegin和begin有什么区别?
同问rend和end

正向与反向的区别,特别注意,超出末端的位置。可以自己动手验证啊。

#16
hzdz2007-08-04 16:54
昨天上网的机子没有VC。。谢谢~
1