为什么此代码会给出 Vector 超出范围错误
Why does this code give Vector out of range error?
所以我有这段代码,我试图反转字符串向量(我知道有更好的方法,这是项目的一部分(。我得到矢量越界错误(我的猜测是它发生在函数循环部分(,我应该进行哪些更改才能正确运行此代码?
//reversing a string
#include <iostream>
#include <vector>
typedef std::vector<std::string> strvector;
strvector reverse (strvector &vec);
int main()
{
strvector string;
std::string a;
std::cout << "Enter strings type esc to stop" << 'n';
while (true)
{
std::cin >> a;
if (a=="esc")
break;
string.push_back(a);
}
strvector reversed = reverse(string);
std::cout << reversed.size();
for (auto i:reversed)
std::cout << ":" << i << ":" ;
}
//===-===-===-Functions-===-===-===//
strvector reverse (strvector &vec)
{
std::string temp;
for (int i =0;i<vec.size();i++)
{
temp = vec.at(i);
vec.at(i)=vec.at(i+1);
vec.at(i+1)=temp;
}
return vec;
}
这一行:
vec.at(i)=vec.at(i+1);
访问超出末尾的元素。 将 +1 添加到已经到向量末尾的索引中不是一个好主意:-(
此外,反向函数通过引用传递,然后返回通过引用传递的向量。 做一个或另一个可能是好的。
这个反向函数使用 rbegin(( 和 rend(( 来初始化一个新的向量。
最后,我发现如果我使用 getline(cin,input_line(,我可以避免在尝试将数据直接读取到变量时遇到的许多错误。 您处理的输入案例越多,您就越经常发现这很有帮助。
很抱歉将 typedefs 改回 std::vectorstd::string。 我在遵循代码时遇到问题,需要以一种我可以记住它们的方式命名变量。 我尽量避免使用单字符变量名称。
#include <iostream>
#include <vector>
std::vector<std::string> reverse (std::vector<std::string> vec)
{
return std::vector<std::string> (vec.rbegin(), vec.rend());
}
int main()
{
std::vector<std::string> string_vector;
std::string input_line;
std::cout << "Enter strings type esc to stop" << 'n';
while (std::getline(std::cin, input_line) && input_line != "esc")
{
string_vector.push_back(input_line);
}
std::vector<std::string> reversed = reverse(string_vector);
std::cout << reversed.size();
for (auto element:reversed)
std::cout << ":" << element << ":" ;
}
相关文章:
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 使用范围库初始化 std::vector
- 示例代码中使用分隔符将 std::string 拆分为 std::vector 的范围问题
- 将视图范围设置为std::vector
- std::vector 范围构造函数可以调用显式转换吗?
- 基于 C++ 范围的 std::vector 迭代的顺序
- C++ 如何在 std::vector 中插入一个连续的间隔范围?
- 在基于范围的循环中使用shared_ptr到std :: vector
- std::vector<std::vector<int>>:调试断言失败。C++矢量下标超出范围保留内存
- 在<Object>基于范围的 for 循环中从 std::vector 获取指向对象的指针
- 为什么此代码会给出 Vector 超出范围错误
- "vector"未在此范围内声明
- 我的程序正在抛出一个错误,声称Vector下标超出了范围.(C )
- 基于范围的loop和std :: vector.push_back()崩溃了程序
- C 内存管理问题,std :: vector nevere rase内存超出范围
- 使用范围检查和带符号的size_type扩展std::vector
- 擦除范围从std :: vector删除向量的最佳方法
- 当第一个 itr 在最后一个 itr 之后时,std::vector 范围构造函数的官方行为是什么?
- 在 std::vector 中插入迭代器范围