【问题标题】:Multiple array using vector of vector使用向量的向量的多个数组
【发布时间】:2017-07-09 15:19:32
【问题描述】:

我想使用向量的向量插入多个数组。
对于那个 I/P 是这样的:

2   : Number of array ( can be vary )    

3  1 2 3  :  3( size of array)  1 2 3( elements in array )      

4  4 5 6 7  : 4( size of array) 4 5 6 7 ( elements in array)       

然后我需要对其进行一些操作。
所有 I/P 均由用户输入。只给出了它的范围。

2 <= No of array <= 10 


1 <= Elements in array <= 1000000 

对于以上我尝试了以下方法:

int main()
{
    int no_of_array, size;
    long int num;
    int j = 0; 

    cin >> no_of_array;

第一种方式:

vector < vector<int> > array_vector[no_of_array];
   while( no_of_array -- )
   {
        cin >>size;
        for( int i = 0; i < size ; i++ )
            {
                cin >> num;
                array_vector[j].push_back({num});
            }
            j++;
    }
  cout<< vector_array[1][2];    // Error 

第二种方式:

vector< vector<int> > array_vector;
while( no_of_array --)
{
    cin >> size;
    for( int i = 0 ; i < size ; i++ )
    {
        cin >> num;
        array_vector[j].push_back(num);
    }
    j++; 
 }   
cout<< vector_array[1][2];     // Error       

第三种方式:(工作)

vector<vector<int> > array_vector;
for( int i = 0 ; i < no_of_array ; i++ )
{
    cin >> size;
    vector<int> v;
    for( int j = 0 ; j < size ; j++ )
    {

        cin >> num;
        v.push_back(num);
    }
    array_vector.push_back(v);
}    
cout<<array_vector[1][2];    // No Error         

在某处我读到向量的第三种方式不适合竞争性编程。为什么??
用第一种两种方法遍历元素时我犯了什么错误?

【问题讨论】:

  • "...不适合竞技编程..." - 那又怎样?那些“竞争性编程”网站并不关心最佳实践或编写可维护的代码。不要在他们身上浪费时间。你只是要学习坏习惯和一些你很可能永远不会在现实世界中使用的东西。编写真正的程序并改为阅读good books
  • @Jesper Juhl 真正的编程???拜托,你能举个例子吗??
  • 我的意思是编写您真正需要想要编写的真实程序,而不是从竞争性编程网站上解决愚蠢问题的解决方案。

标签: c++ vector c++14


【解决方案1】:

你可以试试下面的代码

int main(int argc,char* argv[])
{
    unsigned int num;
    int elm;
    unsigned int size;

    std::cout << "Enter the number of rows" << std::endl;
    std::cin >> num;
    std::vector<std::vector<int> > a(num,std::vector<int>(0,0));

    for(unsigned int i=0;i<num;i++)
    {
        std::cout  << "Enter the size of " << i+1 << "array:" << std::endl;
        std::cin >> size;

        for(unsigned int j=0;j<size;j++)
        {
            std::cout << "Enter the element" <<std::endl;
            std::cin >> elm;

            a[i].push_back(elm);
        }
    }

    for(unsigned int i=0;i<a.size();i++)
    {
        for(unsigned int j=0;j<a[i].size();j++)
        {
            std::cout << "Element at [" <<i<<"][" <<j <<"] is " << a[i][j] <<std::endl;
        }
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2011-06-20
    • 2014-07-01
    相关资源
    最近更新 更多