• 用vector建立2D数组


        vector< vector<int> > //一定要有空格,否则认为移位运算符。

        vector<vector<int> > array(3) ,申请保存3个向量的vector,array[i]返回的是第i个向量,同理array[i][j]返回的是第i个向量的第j个元素。

       问题到这里,你可能会得意的说:"我明白了,很简单吗!"。别急,还有一些细节问题:如下   
        vector< vector<int> >   array2(3);   
        array2[1][2] = 9;   
        我保证你的程序会segement   failed,原因就是你没有指定向量的大小,用push_back可以解决这个问array2[1].push_back(9);但是好象不太爽。就不能用operator[]吗?答案是肯定的。不过要多加几个步骤,如下:   
        for (int i=0; i < 3; i++)   
           array[i].resize(3);

      这样,你就定义了一个3X3的数组了(另一个3在   申明时定义的)。而且你可以随时改变它的大小。 

        #include <iostream>   
    #include <vector>

    using namespace std;

    void main()
    {
    vector< vector<int> > array(3);

    for (int i = 0; i < 3; i++)
    array[i].resize(3); //设置数组的大小3X3
    //现在你可以和使用数组一样使用这个vector
    for (i=0; i < 3;i++)
    for (int j=0; j<3; j++)
    array[i][j]=(i*j);
    //增加一句 printf("%d",j);,会出现 j; ' : undeclared identifier

    //输出
    for ( i=0; i < 3; i++)
    {
    for(int j=0;j<3;j++) //为什么要加int 否则出现 j; ' : undeclared identifier
    cout << array[i][j] << "";
    cout<<endl;
    }


    array.resize(5);
    array[3].resize(3);
    array[4].resize(3);


    //现在是5X3的数组了
    for ( i=0; i < 5; i++)
    for (int j=0; j < 3; j++)
    array[i][j] = (i*j);

    for ( i=0; i<5; i++)
    {
    for (int j=0; j<3; j++)
    cout<<array[i][j]<<"";
    cout<<endl;
    }
    }

       我是在VC6编译的这个程序,错误也是基于VC6.0的。注意这个程序i,j 的作用域问题,第一次定义i时,i的作用域相当于是整个函数,第一次定义j时,j包含在外层的第一次定义i的for内,作用域只是在i的for循环内。是局部变量. 

     for的作用域在VC6.0和VS2010是不同的,具体看下一篇文章。

      

  • 相关阅读:
    [java] 深入理解内部类: inner-classes
    [java] 更好的书写equals方法-汇率换算器的实现(4)
    [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3
    [java] jsoup使用简介-汇率换算器实现-插曲2
    [java] 汇率换算器实现(3)
    [java] 汇率换算器实现-插曲1-正则表达式(1)
    [java] 汇率换算器实现(2)
    [java] 汇率换算器实现(1)
    [Basic] The most basic things about java
    电路相关知识–读<<继电器是如何成为CPU的>>
  • 原文地址:https://www.cnblogs.com/youxin/p/2434022.html
Copyright © 2020-2023  润新知