繁体   English   中英

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 ”的情况下,output应该是这样的:

输入:0; 结果:{这里的数字};
...
输入:9; 结果:{这里的数字};


否则,您可以只使用 2 个不同的 arrays 或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>>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM