次の 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++ の初心者として、古い標準を学習する代わりに直接それを採用すべきかどうか疑問に思います。しかし、それはおそらく別の質問に最適です。