免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5441 | 回复: 8
打印 上一主题 下一主题

[函数] 说是vector out of range 我查了一天,没查出问题,帮忙看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-04 14:53 |只看该作者 |倒序浏览
#include<iostream>
#include<vector>
using namespace std;

string operate(vector<string>vLine,int width,int height,int style);

int main()
{
  vector<string> vLine;
  string str;
  for(int i=0;i<3;i++)
  {
          cin>>str;
          vLine.push_back(str);
          }  
string strRes=operate(vLine,5,5,0);
cout<<strRes<<endl;
return 0;
   
}



string operate(vector<string>vLine,int width,int height,int style)
{
    string styleTab[10][9]={{" "," "," "," "," "," "," "," "," "}};//for test ,只先给出一种样式

   
    int length=vLine.size();
        if(0==length){
        cout<<"文字长度为0,请核查!"<<endl;
        cin.get();
        exit(1);
    }
   
    int index = 0;   
    string v_ary[100][100];
   
    while(index <length)
    {
        for(int i=width*2; i>=0; i--)
        {
            for(int j=0; j<=(height+1); j++)
            {
                if( i == (width * 2))//至右

                {
                    if(j==0)
                    {
                        
                        v_ary[i][j] = styleTab[style][1];//右上角

                        
                    }
                    else if(j == (height + 1))
                    {
                        v_ary[i][j] = styleTab[style][3];//右下角

                    }
                    else
                    {
                        v_ary[i][j] = styleTab[style][6];//右中

                    }
                }

                else if ( i== 0)//至左

                {
                    if(j==0)
                    {
                        v_ary[i][j] = styleTab[style][0];//左上角

                    }
                    else if(j == (height + 1)){
                        v_ary[i][j] = styleTab[style][2];//左下角

                    }
                    else{
                        v_ary[i][j] = styleTab[style][6];//左中

                    }
                }

                else if( i % 2 == 0)//横向定位

                {
                    if(j==0)//部份顶部

                    {
                        v_ary[i][j] = styleTab[style][4];
                    }
                    else if(j == (height + 1))//部份底部

                    {
                        v_ary[i][j] = styleTab[style][5];
                    }
                    else    //中部

                    {
                        v_ary[i][j] = styleTab[style][7];
                    }
                }
                else if(j == 0 || j == (height + 1))    //补齐顶,底部

                {
                    v_ary[i][j] = styleTab[style][8];
                }
                else//文字登场

                {
                    cout<<vLine[index]<<endl;
                    string c=vLine[index];
                    if (c == "\n" || c == "\r")
                    {                           
                        while(j<(height+1))//遇到换行或是回车将本竖行其余空格补满

                        {
                            v_ary[i][j] =' ';
                            j++;
                        }
                        j = height;                           
                    }
                    else
                    {
                        
                        v_ary[i][j] = c;//填充文字

                    }
                    index++;
                                       
                }
            }//for j

        }//for i


    }//while

}

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2008-08-04 15:00 |只看该作者
index++;
放的位置是不是有问题?感觉应该放在最外层的while循环中,而不是放在for j循环中。

修正如下:
                                       
                }
            }//for j

        }//for i

          index++;
    }//while

论坛徽章:
0
3 [报告]
发表于 2008-08-04 15:43 |只看该作者

回复 #2 happy_fish100 的帖子

感谢你的关注
index++  是在里层,问题不在这里,
http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
这里有完整代码下载,麻烦看一下

论坛徽章:
0
4 [报告]
发表于 2008-08-04 16:35 |只看该作者
不知道楼主用的什么编译环境,我的机子两个代码编译都过了。

环境:WinXP+MinGW

论坛徽章:
0
5 [报告]
发表于 2008-08-04 17:02 |只看该作者

回复 #4 goreycn 的帖子

编译没有问题,运行时有问题。vector out of range

论坛徽章:
0
6 [报告]
发表于 2008-08-04 17:48 |只看该作者
从你的循环来看,的确是 index++;放错了逻辑位置,不知你这么放有何用意?溢出是肯定的,因为i循环1次,j的值循环三次,index的值就超出了vector的容量了。

论坛徽章:
0
7 [报告]
发表于 2008-08-04 17:49 |只看该作者
况且每次循环都重新遍历vector,不知用意何在?

论坛徽章:
0
8 [报告]
发表于 2008-08-04 20:47 |只看该作者

回复 #7 nicolas.shen 的帖子

index位置没有错,没有理解程序功能,我没讲清楚

我现在解决了,但是方法是不正确的。
for (int i=0;i<100;i++)
        {
                v_content.push_back("  ");
        }

我手动括大的vec的size
in:
我在心里对自己说:“我有爱的权利,至于她是否接受那是她的事。”马上又觉得这种浪漫在

一个现实的社会中简直是可笑的。
out:
┏━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┯━┓

┃  │  │  │  │  │  │  │  │。│直│的│在│得│”│是│是│利│我│自│我┃

┃  │  │  │  │  │  │  │  │  │是│社│一│这│马│她│否│,│有│己│在┃

┃  │  │  │  │  │  │  │  │  │可│会│个│种│上│的│接│至│爱│说│心┃

┃  │  │  │  │  │  │  │  │  │笑│中│现│浪│又│事│受│于│的│:│里┃

┃  │  │  │  │  │  │  │  │  │的│简│实│漫│觉│。│那│她│权│“│对┃

┗━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┛

论坛徽章:
0
9 [报告]
发表于 2008-08-05 09:42 |只看该作者

回复 #6 nicolas.shen 的帖子

你好,你说的很对,我测试输入了,是i一次,j三次。但是为什么呢?我一直没有看明白?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP