使用矢量矢量

时间:2017-07-09 15:19:32

标签: c++ vector c++14

我想使用矢量向量插入多个数组 为此,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         

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

1 个答案:

答案 0 :(得分: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;
}