【发布时间】:2021-05-17 17:27:38
【问题描述】:
我有两个向量。一个 char 向量包含元素,每个元素存储一个段落的字符(包括 dot 。另一个是字符串向量,其每个元素应存储从第一个向量创建的单词。
这是我的代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string source = "Vectors are sequence containers representing arrays that can change in size!";
vector<char> buf(source.begin(),source.end());
vector<string> word;
size_t n = 0;
size_t l = 0;
for (size_t k = 0; k < buf.size(); k++) {
if (buf[k] == ' ' || buf[k] == '\0') {
for (size_t i = n; i < k; i++) {
word[l] = word[l] + buf[i];
}
n = k + 1;
l++;
}
}
for (size_t m = 0; m < word.size(); m++) {
cout << word[m] << endl;
}
return 0;
}
然后系统说:
表达式:向量下标超出范围
“这个项目”触发了断点
当然,我尝试了很多方法将buf 元素连接成一个word 元素(使用.push_back()、to_string()、...),但它总是会出错。我不尝试使用普通数组或const char* 数据类型,因为我的练习要求我只使用string 和vector。
【问题讨论】:
-
你永远不会
push_back或resize向量word所以这样做word[l] = ...是写越界,因此是未定义的行为 -
矢量
buf真的完全没用。您可以直接在source上以完全相同的方式进行迭代。
标签: c++ arrays string vector compiler-errors