我正在尝试创建一个函数,它接受一个字符串并将字符串的元素放入一个 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] 元素时,当内部应该已经有一个元素时,它会得到“无”。
最佳答案
您对结果的索引是错误的。 i
是 iterable
的索引,但您使用 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/