gpt4 book ai didi

c++ - 两个带有 STL 迭代器的循环

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

我如何使用 STL 迭代器重写这个?

for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board[i].size(); j++) {
if (board[i][j] == '*') {
if (board[i][j + 1] == '*') {
j++;
sum += a;
} else {
sum += b;
}
}
}
}

我必须看到这样的东西(但也许这不是个好主意?):

vector<string>::iterator board_elem;
vector<string>::iterator cell_itr;

for (board_elem = board.begin(); board_elem != board.end(); board_elem++) {
for (cell_itr = board_elem.begin(); cell_itr != board_elem.end(); cell_itr++) {
cout << board_elem[cell_itr];
}
}

最佳答案

一般来说,我看不出为什么你应该在这里使用迭代器,但如果你想:

for (auto bit = board.begin(); bit != board.end(); ++bit) {
for (auto sit = bit->begin(); sit < bit->end(); ++sit) {
if (*sit == '*') {
if (*(++sit) == '*') {
sum += a;
} else {
sum += b;
}
}
}
}

如果您不能保证最后一个字符不是 '*',那么您必须将最后一个 if 替换为以下内容:

if ((cit+1) != it->end()  && *(++cit) == '*') { 

如果你喜欢 hack 一点,你也可以使用基于范围的 for 循环(虽然我不推荐它):

for (auto& e : board) {
bool isFirst=true; //next * will be the first one in a row
for (auto& c : e) {
if (c == '*') {
sum += b;
if (!isFirst) {
sum = sum - 2*b + a; //second in a row - subtract what we falsely added
}
isFirst=!isFirst;
} else {
isFirst = true;
}
}
}

关于c++ - 两个带有 STL 迭代器的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285739/

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