Учитывая тот же квадрат чисел, но каждое из них является строкой
В этом есть некоторая двусмысленность.Принятый ответ видит квадрат как
std::vector<std::string>
, но его также можно интерпретировать как
std::vector<std::vector<std::string>>
В этой версии обрабатываются оба:
#include <iostream>
#include <string>
#include <vector>
template<typename T>
int toint(const T& x) {
return std::stoi(x);
}
template<>
int toint(const char& x) {
return x-'0';
}
template<class T>
std::vector<int> line2intvec(const T& in) {
std::vector<int> result;
for(auto& e : in) {
result.push_back( toint(e) );
}
return result;
}
void print_vvi(const std::vector<std::vector<int>>& vvi) {
for(auto& l : vvi) {
for(auto& r : l) {
std::cout << " " << r;
}
std::cout << "\n";
}
}
int main() {
std::vector<std::string> vs = {
"1234",
"2345",
"3456",
"4567"
};
std::vector<std::vector<std::string>> vvs = {
{ "1", "2", "3", "4" },
{ "2", "3", "4", "5" },
{ "3", "4", "5", "6" },
{ "4", "5", "6", "7" }
};
std::vector<std::vector<int>> result1;
std::vector<std::vector<int>> result2;
for(auto& s : vs) {
result1.emplace_back( line2intvec(s) );
}
print_vvi(result1);
for(auto& v : vvs) {
result2.emplace_back( line2intvec(v) );
}
print_vvi(result2);
}