精华内容
下载资源
问答
  • 第3周_向量数组与矩阵_.pdf
  • 4 顶点数组与法向量数组 我们分析样例的目的是希望了解样例中各部分代码的作用以及它们之间的关系。而实现这一目的的有效方法是对样例进行简化,解析出其中最基本的语句,并分析它们的用法。   从样例的运行结果...
     
    

    4 顶点数组与法向量数组

    我们分析样例的目的是希望了解样例中各部分代码的作用以及它们之间的关系。而实现这一目的的有效方法是对样例进行简化,解析出其中最基本的语句,并分析它们的用法。

     

    从样例的运行结果我们知道OpenGLDemo显示了一个转动的立方体,在立方体的表面还有黑莓图标作为纹理帖图。为了简化该样例,我们可以从最简单的形状——三角形开始,同时去掉旋转、纹理帖图等相对复杂的元素。所以简化样例的第一个目标是在屏幕上显示一个静止的三角形。

     

    为了显示一个静止的三角形,我们需要了解样例中的绘制过程是如何完成的,从而进行简化。

     

    从上一小节的分析知道,类OpenGLScreen完成了EGL的初始化工作,同时开启了一个线程不断更新和显示3D图像。其中3D模型的更新是由OpenGLScreen调用CubeRenderer的update方法完成的,调用之后OpenGLScreen再调用CubeRenderer的render方法绘绘制3D图像,最后OpenGLScreen通过eglCopyBuffers方法或者是eglSwapBuffers方法将图像显示出来。我们希望绘制的三角形是静态的,不需要运动,所以我们暂时不分析CubeRenderer的update方法。而显示3D图像的方法我们也不需要关注,可以将它当作现成的框架使用。因而,我们需要分析CubeRenderer的render方法,进而修改render方法让它显示我们希望显示的三角形。

     

    从开发环境中打开CubeRender的render()方法,我们可以看见该方法的详细实现。先看第一句:

           gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    这一句的作用是清空屏幕,其中的参数是指定清空的方式,读者可以暂时不去解它的详细作用。

    之后两句是矩阵变换的设置和当前矩阵的设置,有关这两句我们在下一节讨论,读者可以暂时认为这两句是开始绘制3D图像之前必须的设置。注意,这两句是必须的,虽然我们现在可以不去理解它的作用。语句如下:

                 gl.glMatrixMode(GL10.GL_MODELVIEW);

                 gl.glLoadIdentity();

    设置之后通过gLTranslatef()方法移动模型,因为最初的时候观察点在原点上,模型也在原点上,不移动模型的话可能会看不到需要绘制的模型,有关观察点的移动我们也在下一节进行讨论。

                 gl.glTranslatef(0, 0, -3.5f);

    移动模型之后再通过glRotatef()方法旋转模型,之所以对模型进行旋转是希望达到立方体转动的效果,我们这一节不讨论模型的运动,所以这一句在我们的简化代码里可以删除。

    gl.glRotatef(_angle, 1.0f, 1.0f, 0.0f);

     

     

    下面进一步要讨论的就是有关3D模型的建立。在OpenGL中,一个3D模型的建立是通过不同的面实现的,如实例中的立方体就是由六个平面组成。而一个面是通过指定面的项点进行定义的,比如,通过指定一个正方形的四个项点可以定义一个正方形的平面。当然,一个正方形的平面可以通过两个等腰三角形平面组成,这样就可以通过指定六个项点对一个平面进行定义。实例中的一个平面就是由两个等腰三角形组成的,有关实例中的平台在下面会进一步详细讨论。在3D世界中,一个点需要通过三个浮点数来指定,分别指定它的X坐标、Y坐标和Z坐标。如{0.5f,0.25f,-0.5f}就指定了一个X坐标为0.5,Y坐标为0.25,Z坐标为-0.5的一个点。通过以上简单的介绍,读者可以知道要定义一个立方体需要指定一系列的项点。不过,如果我们只希望绘制一个三角形平面的话,只需要指定3个项点,也就是9个浮点数。

    在标准的OpenGL中,一个顶点可以通过方法glVertex3f()指定,如方法glVertex3f(0.5f,0.25f,-05.f)就指定了一个顶点。通过以下方法可以指定一个三角形:

    glVertex3f(0.5f,0.25f,-05.f);

    glVertex3f(0.0f,0.0f,-05.f);

    glVertex3f(0.25f,0.5f,-05.f);

    以上定义的三角形在Z坐标为-0.5的一个平面上,三个顶点的X坐标和Y坐标分别是:0.5,0.25  0,0  0.25,0.5。

     

    不过,遗憾的是BlackBerry所支持的OpenGL ES并没有提供方法glVertex3f()。之所以不提供glVertex3f()的支持是因为可以通过顶点数组来代替一个一个的顶点,而使用顶点数组的效率更高一些。所谓顶点数组就是将一个模型的所有顶点放在一个数组里,通过这个数组来定义对应的模型。

     

    为了在OpenGL中启用顶点数组,开发人员需要在使用顶点数组之前启用该功能。启用顶点数组功能可以通过方法glEnableClientState()完成,其中的参数是希望启动的功能。OpenGLDemo中的代码如下:

                 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

                 gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

                 gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    其中第一句用于启动顶点数组支持,第二句用于启动法向量数组的支持,第三句用于启动纹理数组的支持。有关纹理我们在下面章节进行讨论,在绘制三角形的简化代码中我们可以将第三句删除。

     

    有关法向量数组的概念和顶点数组的概念相同,就是通过一个数组来指定不同顶点的法向量,从而避免一个一个地指定法向量。那么,法向量是什么呢?简单来讲一个顶点的法向量就是用于指定这个顶点朝向的向量。

    对于刚接触3D图形的读者而言,指定一个点的朝向可能会显得有点奇怪。对于一个单纯的点而言,指定它的朝向确定没有多大意义,不过我们这里的点是用于指定平台的顶点,而一个平面是有它的朝向的。通过指定平面的朝向,可以让系统决定是否绘制这个平面,还可以让系统决定它的光照情况,总之,指定一个平面的朝向对于3D系统来讲非常重要,而一个平面的朝向是通过顶点的朝向决定的。

    对于一个绝对的平面来讲,它所有顶点的朝向和平面的朝向是一致的,所有顶点的朝向也都相同。不过,如果所绘制的是一个曲面,则不同顶点的朝向一般都是不同的。对于曲面这种复杂的情况这里不做讨论。对于一个平面来讲,法向量是垂直于这个平面的方向向量。

    在OpenGL中,法向量通过三个浮点数指定,分别代表X轴、Y轴和Z轴上的值,通过这三个值的所指定的点和原点连成的线就是法线,就是垂直于所定义平面的线。另外,法向量是一个向量,所以它的长度是不重要的,重要的是它的方向。求一个平面的法向量可能会涉及复杂的数学计算,不过读者可以先了解一些简单的向量,如{0,0,-1}就是一个指向Z轴负方向的向量,它对应的平面就是一个垂直于Z轴,面向Z轴负方向的面。

    在启用顶点数组和法向量数组后,需要调用对应用方法指定顶点数组和法向量数组。指定顶点数组的方法为glVertexPointer,带四个参数,主要注意第一个参数和第四个参数。第一个参数为size,用于指定一个顶点由几个坐标值构成,参数必须是2、3或者是4。在样例中使用的是3,表示由3个坐标值构成一个顶点。假设有数组{0.1f,0.1f,0.1f,0.2f,0.2f,0.2f}传入的话,系统会认为{0.1f,0.1f,0.1f }是一个顶点,而{0.2f,0.2f,0.2f }是第二个顶点。第四个参数为需要传入的数组,样例中为_cubeVertices。

    指定法向量数组通过方法glNormalPointer完成,带三个参数,只需要关注第三个参数即可。第三个参数是需要传入的法向量数组。传入之后系统会将每三个值作为一个法向量。样例中传入的法向量数组为_cubeNormals。

    样例中指定纹理数组的方法暂不讨论。

    代码如下:

                 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _cubeVertices);

                 gl.glNormalPointer(GL10.GL_FLOAT, 0, _cubeNormals);

                 gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, _cubeTexCoords);

    在指定了所有数组之后,需要调用glDrawArrays开始绘图。该方法的最后一个参数指定了顶点的个数,在使用过程中需要通过对顶点数组的计算得出顶点的个数。代码如下:

              gl.glDrawArrays(GL10.GL_TRIANGLES, 0, _vertexCount);

    要进一步分析样例代码的话,我们需要知道变量_cubeVertices和_cubeNormals是如何指定的。打开CubeRenderer的initialize方法,可以看到以下两行初始化_cubeVertices和_cubeNormals变量的语句:

                _cubeVertices = Cube.createVertexBuffer();

                _cubeNormals = Cube.createNormalBuffer();

    从中可以看到CubeRenderer调用了Cube类的静态方法createVertexBuffer 和createNormalBuffer得到了顶点数组和法向量数组。由此跟踪到Cube类,可以看到Cube类中对于顶点数组_vertices和法向量数组_normals的定义,方法createVertexBuffer 和createNormalBuffer将数组转变成对应的FloatBuffer。

    通过以上的分析可以大致了解OpenGLDemo样例是如何绘制3D图像的。为了强化对这个过程了理解。读者可以考虑修改render方法,用于绘制自己希望绘制的模型。为了简单化,本文通过修改render方法绘制一个三角形。

    打开CubeRenderer的render方法,将原有代码注释掉,开始编写自己的代码。

    首先是清空屏幕,然后进行矩阵变换设置,这三行可以直接拷贝原有代码:

          gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

          gl.glMatrixMode(GL10.GL_MODELVIEW);

          gl.glLoadIdentity();

    然后通过方法glTranslatef移动模型。有关模型的移动我们在下一节进行讨论,在进行详细讨论之前请读者暂时不要修改这一句,仍使用{0,0,-3.5f}。

          gl.glTranslatef(0, 0, -3.5f);

    然后开始启用顶点数组和法向量数组,可以从原来的代码中拷贝以下两行:

          gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

          gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

    进一步开始定义顶点数组,样例中是通过Cube类获得顶点数组,并保存在一个变量中。为了更直观、更简单的实现简化代码,我们可以在render方法中直接定义这个数组。注意,render方法是每次绘制都会调用的,在这里定义数组并不是好的做法,在真实项目的代码中请按样例的结构在其它地方预先定义这些数组。

    首先定义一个浮点数组,数组中有9个浮点数,对应3个顶点。这里定义的是在Z坐标为0.5的平面上的一个三角形,在这个平面上的XY坐标分别是:{-0.5,0.5},{-0.5,-0.5},{0.5,0.5},可以看出这是一个等腰三角形。

     

          float[] _vertices = { -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

                            0.5f, 0.5f, };

    然后通过对应方法将以上浮点数组转换成FloatBuffer:

          FloatBuffer bufferVertices = ByteBuffer.allocateDirect(

                            _vertices.length * 4).asFloatBuffer();

          bufferVertices.put(_vertices);

          bufferVertices.rewind();

    接着需要定义法向量数组,因为以上定义的三角形垂直于Z轴,所以这个三角形的法线应该和Z轴平行,或者可以说Z轴就是这个三角形的法线。我们设定这个三角形朝向Z轴的正方向,所以三个项点的法向量都是{0,0,1},对应的法向量数组为:

    float[] _normals = { 0, 0, 1, 0, 0, 1, 0, 0, 1, };

    定义法向量数组后需要将它转换成FloatBuffer,方法和顶点数组的转换方法相同。

    接着需要计算顶点的个数,本例中顶点是固定的3个,不需要进行计算,不过作为一个好习惯,可以通过顶点数组计算出来,这样修改顶点数组之后就不需要在这里修改顶点个数了。

          int vertexNumber = bufferVertices.remaining() / 3;

    最后调用对应的方法设置顶点数组和法向量数组,并通过方法glDrawArrays将它绘制出来。

          gl.glVertexPointer(3, GL10.GL_FLOAT, 0, bufferVertices);

          gl.glNormalPointer(GL10.GL_FLOAT, 0, bufferNormals);

          gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertexNumber);

    保留其它地方的代码,运行该样例,可以看到运行结果如图18-6:

    图18-6 简化的样例,显示静止的三角形

     

    代码清单18-5中列出的是修改后的render()方法的完整代码,在完整的OpenGLDemo样例中打开CubeRenderer的render()方法,将清单中的代码覆盖原来的代码,其它代码保持不变,编译运行它就可以得到图18-6中的结果。

     

    代码清单18-5

    public void render(GL10 gl) {

     

          gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

          gl.glMatrixMode(GL10.GL_MODELVIEW);

          gl.glLoadIdentity();

          gl.glTranslatef(0, 0, -3.5f);

         

          gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

          gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

     

          float[] _vertices = { -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

                            0.5f, 0.5f, };

          FloatBuffer bufferVertices = ByteBuffer.allocateDirect(

                            _vertices.length * 4).asFloatBuffer();

          bufferVertices.put(_vertices);

          bufferVertices.rewind();

     

          float[] _normals = { 0, 0, 1, 0, 0, 1, 0, 0, 1, };

          FloatBuffer bufferNormals = ByteBuffer.allocateDirect(

                            _normals.length * 4).asFloatBuffer();

          bufferNormals.put(_normals);

          bufferNormals.rewind();

     

          int vertexNumber = bufferVertices.remaining() / 3;

     

          gl.glVertexPointer(3, GL10.GL_FLOAT, 0, bufferVertices);

          gl.glNormalPointer(GL10.GL_FLOAT, 0, bufferNormals);

          gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertexNumber);

    }

    如果需要进一步修改3D模型,只需要对数组_vertices和_normals进行操作,增加对应的顶点和法向量。要注意这里项点以三个为一组,表示一个平面,所以,每增加一个平面需要增加三个顶点和三个法向量。每个顶点由X,Y,Z三个元素组成,每个法向量也由X,Y,Z三个元素组成,所以每增加一个平面需要在_vertices数组中增加9个浮点数,同时需要在_normals数组中增加9个浮点数。

    代码清单18-6中的代码就增加了两个平面,一个是垂直于X轴的三角形平面,一个是垂直于Y轴的三角形平面。

    代码清单18-6

                float[] _vertices = {

     -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f,   0.5f, 0.5f,

    -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f,   -0.5f, 0.5f,

    -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f };

     

                float[] _normals = {

     0, 0, 1, 0, 0, 1, 0, 0, 1,

    -1, 0, 0, -1, 0, 0, -1, 0, 0,

    0, 1, 0, 0, 1, 0, 0, 1, 0 };

     

    读者可以将此样例作为参考了解如何在现有的3D模型中添加平面。不过读者运行这段程序后会发现运行结果和上面的例子没有差别,原因是新增加的两个平面一个垂直于X轴,一个垂直于Y轴,从观察点看不见这两个平面。要看到新增加的两个平面需要转动模型,或者是移动观察点,有关观察点和模型的运动我们在下面章节进行讨论。

    展开全文
  • 字符串 向量 数组

    2013-12-26 23:45:56
    3. 不允许将数组的内容拷贝给其他数组作为其初始值。 int a[]={1.2.3};  int a2[] = a;//错误 4.  指针的数组 : int *ptr[10];//含有10个整数指针的数组 数组的指针 :int (*ptr)[10] = &arr;//...

    一.  标准库类型string

    1.   它表示可变长的字符序列,必须包含string头文件,命名在std中。

    #include<string>

    using std::string;

    2.   getline(is, s) :从is中读取一行赋给s,返回is。遇到换行符就结束读取操作。第三个参数可以设置终止符

    3.   size()函数返回的是一个string::size_type类型的值。string::size_type是一个无符号值而且能足够存下任何string对象的大小。

    4.   字符字面值字符串字面值的区别。字符串字面值不是string对象。

    5.   必须确保加法运算符(+)的两侧运算对象至少一个是string。

    6.   string对象是字符序列,用范围for语句操作:

    for( auto  c  :  str)

          cout<< c <<endl;

    下标运算符[]操作string对象

     s[2] = toupper(s[2]);

     

    二.  标准库类型vector

    1.   它表示对象的集合。也称容器。是类模板而非类型。集合中每个对象都有一个与之对应的索引,索引用于访问对象。

    2.   要使用vector,必须:

    #include<vector>

    Using std::vector;

    3.   由于引用不是对象,则不存在引用的vector。

    4.   向vector对象中添加元素:push_back()

    5.   如果循环体内包含有向vector对象添加元素的语句,则不能使用范围for循环。范围for语句体内不应改变其所遍历序列的大小。

    6.   使用范围for语句操作vector对象:

    vector<int > v{1,2,3,4,5};

    for(auto  & a : v)

          a*= a;//求元素值得平方。

    7.   size()函数返回的是vector<int>::size_type.

    8.    下标访问vector对象:

    vector<unsigned>scores (11 ,0);

    usignedgrade;

    while(cin>> grade){

          if(grade <=100)

                ++scores[grade/10];}

    Vector对象以及string对象的下标运算符可用于访问已存在的元素而不能用于添加元素。

    三.  迭代器

    1.   迭代器可以访问某个元素,也能从一个元素移到另一个元素。

    2.   begin成员返回指向第一个元素的迭代器;

    end成员返回指向容器或string的尾元素的下一个位置(一个本部存在的尾后元素)的迭代器。

    若容器为空,则begin和end返回的是同一个迭代器。

     for(auto it = s.begin(); it != s.end(); ++it)

          *it= toupper(*it);

    3.iter->men与(*iter).men等价。

    4.迭代器类型:vector<int>::iterator it;

                                string::iteratorit2;

                                vector<int>::const_iteratorit3;

                                string::const_iteratorit4;

    如果vector或string对象是个常量,则只能用const_iterator;如果不是常量,则可以用iterator或者const_iterator都可。

    5.c++11新特性:cbegincend,不论对象是不是常量都返回const_iterator。

    6.两迭代器相减所得两迭代器距离,类型是difference_type的带符号整数型。

     

    四.  数组

    1.   定义数组时必须指定数组类型,不允许使用auto关键字去推断类型。不存在引用的数组

    2.   字符串字面值的结尾处有一个空字符’\0’.

    3.   不允许将数组的内容拷贝给其他数组作为其初始值。

    int a[]={1.2.3};

     int a2[] = a;//错误

    4.   指针的数组: int *ptr[10];//含有10个整数指针的数组

    数组的指针:int (*ptr)[10] = &arr;//指向含有10个整数的数组。

    5.   下标访问数组元素,下标类型为size_t与机器相关的无符号类型。在cstddef头文件中定义了size_t.

    6.   范围for()遍历数组元素。

    7.   使用数组的使用编译器会把它转化为指针

    使用取地址符得到该元素的指针。

    String  *p2 = num等价于p2 = &num[0];

    8.   当使用decltype关键字时不会转化为指针,decltype(ia)返回的是数组。

    9.   标准库函数beginend:这两个函数与容器中的两个同名成员函数类似,不过数组不是类型,所以这两个函数不是成员函数。这两个函数定义在iterator头文件中,int  *beg = begin(arr)。

    10. 两个指针相减的结果是ptrdiff_t的标准库类型。ptrdiff_t是定义在cstddef头文件中的机器相关的类型。

    11. C标准库string函数:strlen(p),strcmp(s1,s2),strcat(s1,s2),strcpy(s1,s2),定义在cstring头文件中,传入此函数的指针必须以空字符结束的数组。

     

    展开全文
  • 3.1 命名空间的using 声明 using namespace std; 3.2 标准库类型string 3.3 标准库类型vector 编译器根据模板(template)创建类或函数的过程称为实例化(instantiation) 3.4 迭代器 ...3.5 数组

    3.1 命名空间的using 声明

    using namespace std;

    3.2 标准库类型string


    3.3 标准库类型vector

    编译器根据模板(template)创建类或函数的过程称为实例化(instantiation)

    3.4 迭代器


    3.5 数组

    展开全文
  • 我已经阅读了很多次,只是使用数组作为矩阵,足够公平 . 我有一个x和y坐标的网格X,Y = np.meshgrid( np.arange(0,10,2),np.arange(0,10,1) )a = np.array([[1,0],[0,1.1]])但即使经过谷歌搜索并尝试超过两个小时,...

    我很难进入numpy . 我最终想要的是一个由矩阵变换的矢量的简单箭袋图 . 我已经阅读了很多次,只是使用数组作为矩阵,足够公平 . 我有一个x和y坐标的网格

    X,Y = np.meshgrid( np.arange(0,10,2),np.arange(0,10,1) )

    a = np.array([[1,0],[0,1.1]])

    但即使经过谷歌搜索并尝试超过两个小时,我也无法从 a 的矩阵乘法和每个向量中得到结果向量 . 我知道quiver将组件长度作为输入,因此进入quiver函数的结果向量应该类似于x-component的 np.dot(a, [X[i,j], Y[i,j]]) - X[i,j] ,其中i和j迭代范围 .

    我当然可以在一个循环中编程,但numpy有很多内置工具来使这些矢量化的东西方便,我相信这是一个更好的方法 .

    edit :好的,这是循环版本 .

    import numpy as np

    import matplotlib.pyplot as plt

    plt.figure(figsize=(10,10))

    n=10

    X,Y = np.meshgrid( np.arange(-5,5),np.arange(-5,5) )

    print("val test", X[5,3])

    a = np.array([[0.5,0],[0,1.3]])

    U = np.zeros((n,n))

    V = np.zeros((n,n))

    for i in range(10):

    for j in range(10):

    product = np.dot(a, [X[i,j], Y[i,j]]) #matrix with vector

    U[i,j] = product[0]-X[i,j] # have to substract the position since quiver accepts magnitudes

    V[i,j] = product[1]-Y[i,j]

    Q = plt.quiver( X,Y, U, V)

    展开全文
  • 更新:Eric建议使用math.sqrt不起作用 – 它不处理numpy数组 – 但是使用sqrt而不是** 0.5的想法很好,所以让我们测试一下. In [114]: timeit normedA_4 = (A*A).sum(axis=1)**0.5 10000 loops, best of 3: 46.2 us ...
  •  例如,可以用向量数组{5,1,3,9,6,2,4,7,0,8}表示下图的完全二叉树      Tips:  对于结点v[i],可利用下列公式计算其子结点和父结点  左结点:v[2*i+1]  右结点:v[2*i+2]  父结点: v[int((i-1)/2] ...
  • 定义一个有关人信息的类B: ...成员函数包括:构造函数(从键盘输入一组B类对象并存入B类对象向量,账号输入-1时表示结束)、显示函数(按姓名升序输出向量的所有元素)、计数函数(参数为姓名,统计并返回姓名为...
  • 题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字...因此,我们利用上述性质可以递归遍历整个向量中的元素判定该数组是不是某...
  • 向量数组

    千次阅读 2019-03-13 17:03:35
    1. 数组 对于数组A={a0,a1,...,an−1}A = {\{a_0,a_1,...,a_{n-1}\}}A={a0​,a1​,...,an−1​},任何0≤i&amp;lt;j&amp;lt;n0 \le i &amp;lt; j &amp;lt; n0≤i&lt;j&lt;n,A[i]都是A[j]的...
  • 字符向量元胞数组 要将文本存储为字符向量,请将其用单引号引起来。通常,字符向量包含您视为单个信息片段的文本,例如文件名或图标签。如果您有多个文本片段,例如文件名列表,则您可以将它们存储在元胞数组中。...
  • 数据结构 向量数组Firstly, what is a data structure?首先,什么是数据结构? It is a collection of values that can have relationships among them and functions applied to them. Each data structure is ...
  • title: c++学习之字符串向量数组 date: 2020-07-08 14:00:00 categories: 分类 index_img: /img/articles/vim.jpg tags: - 标签1 - 标签2 本文对《Primer C++》中的字符串、向量数组的零碎知识点进行记录与梳理 ...
  • Matlab中的向量数组(超详细)

    千次阅读 多人点赞 2020-03-16 13:39:41
    文章目录Matlab中的向量数组(超详细)Matlab中的向量介绍创建向量向量的大小索引向量数值索引逻辑索引缩短向量向量运算算术运算逻辑运算sum()、min()、max()、round()、ceil()、floor()、fix()切片Maltab中的数组...
  • +1.1向量 链表 数组

    2019-10-07 06:53:43
    向量向量支持随机读取和更改 查找一般 末端删除快 随机删除慢,它是 “class”. 可作为顺序容器,类似数组,但大小可动态变化。与数组比较,它浪费存储空间,用起来麻烦 链表:只有头结点有名字,不支持随机读取...
  • verilog中的向量数组

    万次阅读 多人点赞 2015-08-01 16:15:02
    verilog中向量数组是两个不同的概念。 reg [7:0] count表示一个位宽为8位的向量;reg count [7:0] 表示一个一维数组数组中的元素是位宽为1的变量;reg [7:0] count [7:0] 表示一个一维数组数组中的元素是位宽...
  • 向量(vector)即一维数组,也是最常用的数组之一。通过NumPy的函数创建一维向量与二维数组常用的方法如下学习笔记汇总。数组可由列表构造,也可以通过*.tolist方法转换列表。创建一维数组输入import num...
  • 数组向量长度的表达 向量长度: size()函数 vector<int> nums; for(i=0;i<5;i++) nums.push_back(i); cout<<"向量元素个数为:"<<nums.size(); 数组(字符串)长度: 数组(字符串)占用空间/...
  • 文本文件直接按行读取为元胞数组of 字符向量,MATLAB别的一些读取模式太zz了,这个函数直接读成字符串后面再处理了。输入参数可以是字符串标量或字符向量,应当是一个文件路径。不是的话会直接套成元胞输出
  • 字符串向量数组

    2019-01-06 21:23:43
    迭代器 凡是使用了迭代器的循环体,都不要向迭代器所属的...数组与C中数组类似 多维数组 使用for范围语句处理多维数组: 除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。 for (auto row : ia) ...
  • 1. 数组性质 。大小确定不变。 。不能copy和赋值 int a[] = {1} int b[] = a;//error b = a;//error 1.1 一些理解复杂的数组类型: int *ptrs[10]; // pArr 是含有10个整形指针的数组 int &refs[10]; // 错误...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,773
精华内容 5,109
关键字:

向量数组