给定以下 Python(来自http://norvig.com/sudoku.html)
def cross(A, B):
"Cross product of elements in A and elements in B."
return [a+b for a in A for b in B]
cols = '123456789'
rows = 'ABCDEFGHI'
squares = cross(rows, cols)
这会产生:
['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'B1', 'B2', 'B3', ...]
作为练习,我想在 C++ 中做同样的事情。目前我有:
#include <iostream>
#include <map>
#include <vector>
using std::string;
using std::vector;
static vector<string> cross_string(const string &A, const string &B)
{
vector<string> result;
for (string::const_iterator itA = A.begin(); itA != A.end(); ++itA) {
for (string::const_iterator itB = B.begin(); itB != B.end(); ++itB) {
char s[] = {*itA, *itB, 0};
result.push_back(string(s));
}
}
return result;
}
int main(int argc, char** argv)
{
const char digits[] = "123456789";
const char rows[] = "ABCDEFGHI";
vector<string> res = cross_string(rows, digits);
for (vector<string>::const_iterator it = res.begin();
it != res.end(); ++it) {
std::cout << *it << std::endl;
}
}
这行得通,但我希望有更好的方法。这也只做字符串,而 python 做任何列表......
编辑:
感谢所有的答复。我接受了我最了解的那个,但阿尔夫的回答紧随其后。我注意到所有人都使用 C++11,并且想知道作为 C++ 的新手,我是否应该直接采用它而不是学习旧标准。但这也许最适合另一个问题。