king 2020 2023-04-05 19:28 采纳率: 50%
浏览 20
已结题

C++vector subscript out of range错误

在vs2022中编辑了一小段代码。编译后运行,输入一个词后回车就提示vector subscript out of range。代码如下所示。请各位达人多多指教。应该做何修改。
word.h

#pragma once
#ifndef a_word
#define a_word
#include<vector>
#include<iostream>
#include<string>
using std::vector;
using std::istream;
using std::string;
using std::cin;
using std::cout;
using std::endl;
istream& word(istream&, vector<string>&, vector<int>&);
#endif

word.cpp

#include"word.h"
istream& word(istream& is, vector<string>& wd, vector<int>& sums) {
    string s;
    while (cin >> s) {
        bool flag = false;
        for (vector<string>::size_type i = 0; i <= wd.size(); ++i) {
            if (s == wd[i]) {
                flag = true;
                sums.push_back(i);
                break;
            }
        }
        if (flag==false) {
            wd.push_back(s);
            sums.push_back(1);
        }
    }
    return is;
}

main

#include"word.h"

int main() {
    vector<string> wd1;
    vector<int> sums1;
    word(cin, wd1, sums1);
    if (wd1.size() == 0) {
        cout << "向量为空。";
    }else
    {
        cout << "一共有" << wd1.size() << "个单词。" << endl;
    }
    
    for (vector<string>::size_type i = 0; i != wd1.size(); ++i) {
        cout << wd1[i] << "出现" << sums1[i] << "次" << endl;
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-04-05 20:06
    关注

    i <= wd.size()
    改为
    i < wd.size()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-07 21:50
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客: 解决【C++】vector subscript out of range下标越界中的 1.检查遍历语句是否正确: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      vector <Girl> girls;
      for (unsigned int g = 0; g < girls.size(); g++) {
      	girls[g]...
      	}
      
      • 下标使用g而非i: 针对girls
        1)增强可读性
        2)同时遍历其他vector时便于区分
      	for (unsigned int b = 0; b < boys.size(); b++) {
      		cout << boys[b] << " 的配对女士有:" << endl;
      		for (unsigned int g = 0; g < girls.size(); g++) {
      			if (boys[b].satisfied(girls[g]) == true && 
      				girls[g].satisfied(boys[b]) == true) {//注意调用的是否是函数以及函数是否含参以及含参顺序
      				//cout << boys[b].getName() << "<-->" << girls[g].getName() << endl;如果只打印姓名,可能有重名,无法确定实际是哪位
      				//因为database与Boy和Girl类不存在继承关系,所以只能通过对象调用public方法
      				cout << girls[g] ;
      			}
      		}
      		cout << endl;//一位男士的所有配对结束后空一行
      	}
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月5日

悬赏问题

  • ¥15 求一个智能家居控制的代码
  • ¥15 ad软件 pcb布线pcb规则约束编辑器where the object matpcb布线pcb规则约束编辑器where the object matchs怎么没有+15v只有no net
  • ¥15 虚拟机vmnet8 nat模式可以ping通主机,主机也能ping通虚拟机,但是vmnet8一直未识别怎么解决,其次诊断结果就是默认网关不可用
  • ¥20 求各位能用我能理解的话回答超级简单的一些问题
  • ¥15 yolov5双目识别输出坐标代码报错
  • ¥15 这个代码有什么语法错误
  • ¥15 给予STM32按键中断与串口通信
  • ¥15 使用QT实现can通信
  • ¥15 关于sp验证的一些东西,求告知如何解决,
  • ¥35 关于#javascript#的问题:但是我写的只能接码数字和字符,帮我写一个解码JS问题