czl666吧 关注:13贴子:272
  • 12回复贴,共1

[C++] 关于vector的初学

只看楼主收藏回复

磨一道题磨一天,来不及写完了,只能先把搜到的一些东西记录下来


IP属地:四川1楼2023-07-07 16:20回复
    首先是,基础的成员函数,常用的有:
    push_back() //在数组的最后添加一个数据
    pop_back() //去掉数组的最后一个数据
    size() //当前使用数据的大小
    swap() //与另一个vector交换数据(或者自己内部交换?)
    其中swap在二维vector中可以做到整行之间的交换,
    比如std::swap(time[i], time[j]);
    可将time的第i行和第j行交换,
    也可以做到单个元素之间的交换,
    比如swap(time[0][0], time[2][2]);


    IP属地:四川2楼2023-07-07 16:25
    收起回复
      接下来记录一下,二维vector的定义和赋值,以及cout的方法
      (相比起matlab,这个东西写矩阵和处理矩阵显得非常笨,格式很固定,所以不得不记下来)
      定义与赋值举例(N行M列):
      int N = 3;
      int M = 4;
      vector<vector<int>> time(N, vector<int>(M));
      time[0] = { 1,9,1,8 };
      time[1] = { 10,10,10,10 };
      time[2] = { 10,12,10,12 };
      cout的方法:
      for (int i = 0; i < time.size(); i++)//输出二维动态数组
      {
      for (int j = 0; j < time[i].size(); j++)
      {
      cout << time[i][j] << " ";
      }
      cout << "\n";
      }


      IP属地:四川3楼2023-07-07 16:30
      回复
        目前还有一个很笨的问题难以解决:很难删除二维vector中的一整行
        首先是erase函数,用了就报错,可能是因为erase(0)只能删除第一个元素,导致二维vector不再是方阵?(有待继续研究)
        但是网上貌似还有讲:即使用erase删掉了一整行,vector的size也是不会变的(逆天
        所以在这里搬运一个方法,也许可能会用到。。。
        总结:在删除二维vector某行元素的时候,用迭代器的遍历,用erase方法进行删除的时候,发现只能该行的元素,不能将二维vector的size减小,如果想既删除又使得size减小,用普通遍历的方式,如下:
        for (int i = 0; i < detectINFO.size(); i++)
        {
        if(detectINFO[i][0]==236)
        {
        detectINFO.erase(detectINFO.begin()+i);
        }
        }
        在外层加一个循环,可以防止元素减少,遍历index越界。(第一次外循环后j==1,此时会漏掉j=0的情况,但也不影响结果,因为当遍历第一次外循环的时候,第一个一维数组没删除,那么遍历外循环第二次的时候,也就不需要删第一个一维数组了)
        for(int j = 0; j < detectINFO.size(); j++)
        {
        cout<<"lqq detectINFO.size()============="<<detectINFO.size()<<endl;
        for (int i = 0; i < detectINFO.size(); i++)
        {
        cout<<"i==========="<<i<<endl;
        cout<<"lff detectINFO.size()============="<<detectINFO.size()<<endl;
        if(detectINFO[i][0]==236)
        {
        detectINFO.erase(detectINFO.begin()+1);
        //break;
        }
        }
        }
        也可能用queue可以解决这一问题,如果后面学了queue,再把有关queue的心得写过来。


        IP属地:四川4楼2023-07-07 16:36
        收起回复
          上一楼错怪了vector,在这里给vector道歉
          刚写完就找到了删除一整行的方法
          例如删除二维vector,time的第2行:
          time.erase(time.begin()+1);
          删除其他行,调整后面+的数字即可


          IP属地:四川5楼2023-07-07 16:41
          回复


            IP属地:重庆来自iPhone客户端6楼2023-07-07 17:23
            回复
              你咋学上c++了


              IP属地:山东来自Android客户端7楼2023-07-07 18:31
              收起回复
                为什么楼主不回复我?孤立我是吧


                IP属地:重庆8楼2023-07-08 15:48
                回复
                  想问一下,楼主研究的vector是否是跟x-vector算法有关


                  IP属地:山东9楼2023-07-10 09:33
                  收起回复