C++ 中动态大小的二维数组中的用户输入
User Input in 2-D array of dynamic size in C++
我正在尝试创建一个二维向量,作为第 0 列它将包含整数,而第 1 列将包含向量。
例如:
column[0] column[1]
2 {2}
5 {1,2,0}
12 {4,7,9,0,0,1,6,0,0}
3 {6}
第 0 列将是用户输入,而第 1 列我将自己计算 - 我不介意它现在是否有虚拟向量,在用户退出后它会打印二维向量。
我试过的是:
int main() {
unsigned int input;
vector<vector<unsigned int>> v;
while (cin >> input) // enter non int to exit
for(int i=0; i<input;i++){
vector<int> factorial; //calc in a separate function - dummy vector for now
for (int j=0; j<factorial.size(); j++){
v[i].push_back(input); //set column 0 as input
v[i][j].push_back(factorial); //set column 1 as the vector containing the factorial of input
}
}
return 0;
}
看来你需要使用 class
:
#include <iostream>
#include <vector>
using namespace std;
template<class T1, class T2>
class Columns{
public:
vector<T1> input;
vector<T2> output;
};
int main(){
Columns<int, int> columns; //Or, if you need to have vector in "output": \
Columns<int, vector<int>> columns;
//Usage:
columns.input.push_back(2);
columns.output.push_back(2);
return 0;
}
但是,如果您需要更短的实现,您可以使用 map
:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(){
map<int, vector<int>> result;
for(int i = 0; i < 10; i++)
result[i] = factorial(i); //Where factorial() is function that returns vector
for(auto res: result){
cout << "Input: " << res.first << "; Result: {";
for(auto res2: res.second)
cout << res2 << "; ";
cout << "};" << endl;
}
}
所以在“map
”的情况下,输出应该是这样的:
Input: 0; Result: {Numbers here};
...
Input: 9; Result: {Numbers here};
否则,您可以只使用 2 个不同的数组或 vectors
:
也许,这是您现在最好的选择。
#include <iostream>
#include <vector>
using namespace std;
template<class T>
vector<T> FactorialNumbers(T input){
vector<T> result;
for((input < 0) ? return result : input = input; input != 0; input--)
result.push_back(input);
return result;
}
int main() {
vector<int> input;
vector<vector<int>> output;
int usrInput = 0;
while(cin >> usrInput){
input.push_back(usrInput);
output.push_back(FactorialNumbers(usrInput));
}
}
如果您只使用 int
,您可以像这样更改 FactorialNumbers
:
int FactorialNumbers(int input){
vector<int> result;
for((input < 0) ? return result : input = input; input != 0; input--)
result.push_back(input);
return result;
}
你也可以试试:vector<pair<int, std::vector<int>>>
我正在尝试创建一个二维向量,作为第 0 列它将包含整数,而第 1 列将包含向量。
例如:
column[0] column[1]
2 {2}
5 {1,2,0}
12 {4,7,9,0,0,1,6,0,0}
3 {6}
第 0 列将是用户输入,而第 1 列我将自己计算 - 我不介意它现在是否有虚拟向量,在用户退出后它会打印二维向量。 我试过的是:
int main() {
unsigned int input;
vector<vector<unsigned int>> v;
while (cin >> input) // enter non int to exit
for(int i=0; i<input;i++){
vector<int> factorial; //calc in a separate function - dummy vector for now
for (int j=0; j<factorial.size(); j++){
v[i].push_back(input); //set column 0 as input
v[i][j].push_back(factorial); //set column 1 as the vector containing the factorial of input
}
}
return 0;
}
看来你需要使用 class
:
#include <iostream>
#include <vector>
using namespace std;
template<class T1, class T2>
class Columns{
public:
vector<T1> input;
vector<T2> output;
};
int main(){
Columns<int, int> columns; //Or, if you need to have vector in "output": \
Columns<int, vector<int>> columns;
//Usage:
columns.input.push_back(2);
columns.output.push_back(2);
return 0;
}
但是,如果您需要更短的实现,您可以使用 map
:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(){
map<int, vector<int>> result;
for(int i = 0; i < 10; i++)
result[i] = factorial(i); //Where factorial() is function that returns vector
for(auto res: result){
cout << "Input: " << res.first << "; Result: {";
for(auto res2: res.second)
cout << res2 << "; ";
cout << "};" << endl;
}
}
所以在“map
”的情况下,输出应该是这样的:
Input: 0; Result: {Numbers here};
...
Input: 9; Result: {Numbers here};
否则,您可以只使用 2 个不同的数组或 vectors
:
也许,这是您现在最好的选择。
#include <iostream>
#include <vector>
using namespace std;
template<class T>
vector<T> FactorialNumbers(T input){
vector<T> result;
for((input < 0) ? return result : input = input; input != 0; input--)
result.push_back(input);
return result;
}
int main() {
vector<int> input;
vector<vector<int>> output;
int usrInput = 0;
while(cin >> usrInput){
input.push_back(usrInput);
output.push_back(FactorialNumbers(usrInput));
}
}
如果您只使用 int
,您可以像这样更改 FactorialNumbers
:
int FactorialNumbers(int input){
vector<int> result;
for((input < 0) ? return result : input = input; input != 0; input--)
result.push_back(input);
return result;
}
你也可以试试:vector<pair<int, std::vector<int>>>