c++ - 获取 vector 元素时出错

标签 c++

我正在尝试创建一个函数,它接受一个字符串并将字符串的元素放入一个 vector 中,唯一的条件是省略重复的连续元素,例如:“AABBC”-> ['A', 'B','C']。我的代码如下

std::vector<char> uniqueInOrder(const std::string& iterable){
    std::vector<char> result;
    for(int i = 0; i <= iterable.size(); ++i)
    {
        if(i==0 || result[i-1] != iterable[i]){
            result.push_back(iterable[i]);
        }else{continue;}

    }
    return result;

}
int main(){
    auto result  = uniqueInOrder("AABBC");
    for(auto val: result){std::cout << val  <<"\n";}
    return 0;
}

函数的预期输出是:['A', 'B', 'C'] 实际输出为:['A', 'B', B', 'C'] 我不明白为什么它不起作用。显然,当我在 if 语句中得到 result[i] 元素时,当内部应该已经有一个元素时,它会得到“无”。

最佳答案

您对结果的索引是错误的。 iiterable 的索引,但您使用 i - 1 作为 result 的索引。当你到达循环的第四次迭代时,你查看 result[2](result 的第三个元素),但 result 只有 2 个元素; {'A', 'B'},所以你没有得到任何有用的东西(未定义的行为),当然也不是你期望的 'B'

result[i-1] 替换为 result.back() 以便它始终读取最后一个元素。

关于c++ - 获取 vector 元素时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696373/

相关文章:

c++ - OpenCV 中的调试断言错误

c++ - 读取 UTF-8 文件

c++ - C++ 中的智能引用

c++ - 所有派生类的显式实例化

c++ - 满足 std::ranges::range 概念

C++ for 循环输入

c++ - 计算从客户端发送到服务器的数据包数量?

c++ - gdb和ffmpeg编译

c++ - C++ 中的泛型 JAVA? <X extends T> 怎么办?

c++ - 将此代码更改为追加而不是覆盖 (.Wav)