vector遍历问题

Mex_St 2014-04-23 05:12:22
vector<string>contain;
string text;
while(cin>>text)
{
contain.push_back(text);

for(int i=0;i<contain.size()-1;i++)
cout<<contain[i]<<' ';
}

读入几个字符串 然后放到vector里一并输出 ,在调试的时候发现最后的下标i都会又从0开始
例如我输入 cheer up
输出结果是
cheer
cheer up
这是为什么呀? 求大牛指点,谢谢了
...全文
137 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
temperlancer 2014-04-23
  • 打赏
  • 举报
回复

while(cin>>text)
{
    contain.push_back(text);
}
for(int i=0;i<contain.size();i++)
    cout<<contain[i]<<' ';
不出结果的原因是因为cin没有接收到EOF, 所以while(cin>>text)一直是true, 循环跳不出, 不进for loop, 当然没结果. 另外: 使用C++容器的时候强烈建议你使用自带的iterator, 省心省力, 而且绝对不会越界

while(cin>>text)
{
    contain.push_back(text);
}
vector<string>::iterator iter;
for(iter= contain.begin();iter != contain.end();iter++)
    cout<<*iter<<' ';
Mex_St 2014-04-23
  • 打赏
  • 举报
回复
引用 6 楼 ForestDB 的回复:
每输入一个单词,都遍历输出整个vector 把for放到while外面去,看是否符合你的想法。
谢谢解答 我先前也是把for 放在while循环外面的 逐语句调试的时候发现输入结果后一直在 while条件和push两句循环 没有往下走 无输出结果。。后来就把for 放到while里面了 。。不知道是什么回事。。
Mex_St 2014-04-23
  • 打赏
  • 举报
回复
引用 4 楼 u010005508 的回复:
[quote=引用 楼主 Mex_St 的回复:] vector<string>contain; string text; while(cin>>text) { contain.push_back(text); for(int i=0;i<contain.size()-1;i++) cout<<contain[i]<<' '; } 读入几个字符串 然后放到vector里一并输出 ,在调试的时候发现最后的下标i都会又从0开始 例如我输入 cheer up 输出结果是 cheer cheer up 这是为什么呀? 求大牛指点,谢谢了

while(cin>>text)
{
contain.push_back(text);
}
for(int i=0;i<contain.size();i++)
cout<<contain[i]<<' ';
如上代码,你的输出语句放在while循环代码块里面了,因此你每输入一个代码,for循环中都会将重新声明局部变量i,并初始化为0 因此你想一次输出vector中的字符串的话,将for拿到while循环外面来,而且你for循环条件不应该是<contian.size()-1,而应该是<contain.size()[/quote]谢谢解答 我先前也是把for 放在while循环外面的 逐语句调试的时候发现输入结果后一直在 while条件和push两句循环 没有往下走 无输出结果。。后来就把for 放到while里面了 。。不知道是什么回事。。
ForestDB 2014-04-23
  • 打赏
  • 举报
回复
每输入一个单词,都遍历输出整个vector 把for放到while外面去,看是否符合你的想法。
highnewrain 2014-04-23
  • 打赏
  • 举报
回复
引用 4 楼 u010005508 的回复:
[quote=引用 楼主 Mex_St 的回复:] vector<string>contain; string text; while(cin>>text) { contain.push_back(text); for(int i=0;i<contain.size()-1;i++) cout<<contain[i]<<' '; } 读入几个字符串 然后放到vector里一并输出 ,在调试的时候发现最后的下标i都会又从0开始 例如我输入 cheer up 输出结果是 cheer cheer up 这是为什么呀? 求大牛指点,谢谢了

while(cin>>text)
{
contain.push_back(text);
}
for(int i=0;i<contain.size();i++)
cout<<contain[i]<<' ';
如上代码,你的输出语句放在while循环代码块里面了,因此你每输入一个代码,for循环中都会将重新声明局部变量i,并初始化为0 因此你想一次输出vector中的字符串的话,将for拿到while循环外面来,而且你for循环条件不应该是<contian.size()-1,而应该是<contain.size()[/quote] 上面有错,for循环条件确实应该是<contain.size()-1;抱歉
highnewrain 2014-04-23
  • 打赏
  • 举报
回复
引用 楼主 Mex_St 的回复:
vector<string>contain; string text; while(cin>>text) { contain.push_back(text); for(int i=0;i<contain.size()-1;i++) cout<<contain[i]<<' '; } 读入几个字符串 然后放到vector里一并输出 ,在调试的时候发现最后的下标i都会又从0开始 例如我输入 cheer up 输出结果是 cheer cheer up 这是为什么呀? 求大牛指点,谢谢了

while(cin>>text)
{
contain.push_back(text);
}
for(int i=0;i<contain.size();i++)
cout<<contain[i]<<' ';
如上代码,你的输出语句放在while循环代码块里面了,因此你每输入一个代码,for循环中都会将重新声明局部变量i,并初始化为0 因此你想一次输出vector中的字符串的话,将for拿到while循环外面来,而且你for循环条件不应该是<contian.size()-1,而应该是<contain.size()
qinken547 2014-04-23
  • 打赏
  • 举报
回复
第一次contain的size为1,contain[0]="cheer" 第二次contain的size为2,contain[0]="cheer",contain[1]="up"
Mex_St 2014-04-23
  • 打赏
  • 举报
回复
引用 1 楼 zhenwo123 的回复:
for(int i=0;i<contain.size()-1;i++) i重新赋值了啊!
可是这是定义啊。。 后面执行循环语句都不会再重新赋值了吧 ?
挣扎中前行 2014-04-23
  • 打赏
  • 举报
回复
for(int i=0;i<contain.size()-1;i++) i重新赋值了啊!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧