【发布时间】:2020-10-11 20:56:39
【问题描述】:
我有一个vector<vector<char>>,我正在尝试使用copy_if。此函数需要一个开始和结束迭代器。我知道如何在矢量上使用它。但我不知道如何在vector<vector<char>> 上使用它。
我有一个 5 x 5 vector<vector<char>>
'a' 'a' 'x' 'x' 'b'
'a' 'x' 'c' 'c' 'd'
'd' 'd' 'd' 'x' 'b'
'a' 'a' 'x' 'x' 'b'
'a' 'a' 'x' 'x' 'b'
我正在尝试将所有不是“x”的字符复制到新的vector<vector<char>> 中。所以它应该看起来像
'a' ' ' ' ' ' ' 'b'
'a' 'a' ' ' ' ' 'd'
'd' 'd' ' ' ' ' 'b'
'a' 'a' 'c' ' ' 'b'
'a' 'a' 'd' 'c' 'b'
其他角色垂直下落
这是我尝试过的:
vector<vector<char>>::iterator row;
vector<char>::iterator col
int i = -1;
for(row = board.begin(); row != board.end(); ++row)
{
boardCopy.push_back(vector<char>());
++i;
for(col = row->begin(); col != row->end(); ++col)
{
copy_if(row->begin(); row->end(), boardCopy[i].begin(), [](char x){return (c != 'x');});
}
}
【问题讨论】:
-
我不认为
std::copy_if是正确的工具,因为您希望保持相同的相对位置。 -
有人可能会为您想出一个优雅的解决方案,但您也可能会认为您可能使用了错误的工具来完成这项工作。我只需复制整个向量,去掉
x字符,然后将它们压缩。如果您实际上不需要矢量的副本,则可以直接剥离/压缩。 -
重要提示:你真正想要的是一个 25 元素的
vector<char>。仅仅因为它在屏幕上看起来像一个正方形并不意味着您需要所有的嵌套和多余的分配......只需在每 5 个元素后写一个换行符;) -
看来您需要按列而不是按行。只需在纸上画出步骤,然后对其进行编程。 (
copy_if在这种情况下无法使用,最好“手动”复制)。