gpt4 book ai didi

c++ - 替换 vector 中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:22 26 4
gpt4 key购买 nike

我最近完成了一个解决模拟魔方的程序,但是,我的解决方案总是很长,因为该程序通常会循环多次旋转单个层以找到特定颜色。

如果你不知道魔方符号是什么,基本上单个字母代表图层顺时针旋转90度(U),带撇号的字母代表逆时针旋转90度(U'),一个字母后跟一个 2 是 180 度旋转 (U2)。

我想做的是将我的解决方案中的任何 [U, U] 转换为 [U2],然后将任何 [U, U, U] 转换为 [U'] .从本质上将解决方案压缩到更小的尺寸

我将我的旋转字母作为字符串存储在一个字符串 vector 中,所以我想的是像这样创建一个循环

for (int i = 0; i < vector.size(); i++)
{
//and then check if there are similarities
if (vector[i] == "U" && vector[i+1] == "U" && vector[i+2] == "U")
{
//Replace the first string with U' and delete the other 2 from the vector
}
else if (vector[i] == "U" && vector[i+1] == "U" && vector[i+2] != "U")
{
//Replace with U2
}
//Etc.
}

我只是想知道是否有人有任何更优雅的解决方案,或者您是否可以看到我的缺陷(我还没有实现)

谢谢!

最佳答案

这可以通过坚持 algorithms library 来完成执行搜索,从而避免担心边界条件。

我会编写一个辅助函数来使用 std::search_n 为您进行搜索找到连续的 U

template<typename RanIter>
std::pair<RanIter, RanIter> do_search(RanIter first, RanIter last)
{
// first look for 2 consecutive Us
auto it = std::search_n(first, last, 2, "U");

if(it == last) {
// nothing to replace, bail
return std::make_pair(last, last);
}

// check if we have 3 consecutive Us
if(std::distance(it, last) >= 3) {
// there are at least 3 elements in the range, it's ok to check
if(*std::next(it, 2) == "U") {
return std::make_pair(it, std::next(it, 3));
}
}

return std::make_pair(it, std::next(it, 2));
}

辅助函数返回一对指示要替换的元素范围的迭代器。如果该对的第一个元素等于 vector 的 end(),则没有更多元素要替换。否则,根据对元素之间的距离是 2 还是 3,我们分别用 "U2""U'" 替换范围。

while(first != vec.end()) {
auto result = do_search(first, vec.end());
first = result.first;
if(first == vec.end()) {
break;
}

auto dist = std::distance(first, result.second);
if(dist == 3) {
first = vec.insert(first, "U'");
} else {
first = vec.insert(first, "U2");
}

// advance first to the first element to be removed and erase them
std::advance(first, 1);
first = vec.erase(first, std::next(first, dist));
}

Live demo

关于c++ - 替换 vector 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com