二维向量vector的使用

本文详细介绍了二维向量的创建、初始化、属性及操作方法,并通过示例代码展示了如何使用二维向量来处理实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:

//二维向量的定义
vector< vector<int> > b(10, vector<int>(5,0)); //创建一个10*5的int型二维向量b


vector<vector<int> > b;//创建一个未知大小的int型二维向量b,
//card为自定义结构体或类
vector< vector< card > > AIcards( 4, vector< card >( 13 ) );  

//二维向量全部初始化为零:
int m=str1.size();  
int n=str2.size();  
vector<vector<int>>dp(m+1,vector<int>(n+1,0));  

注意:

使用低版本VS可能会出现“error C2146: syntax error : missing ',' before identifier”的错误

解决办法就是如下定义

vector<vector<int>/**/>

经过测试,把/**/换成空格也可以,也就是只要不影响词法语法,最后两个 ' > ' 之间添加上一些东东把它们分开即可。


示例代码:

vector<vector<int> > Pos_X;
vector<vector<int> > Pos_Y;
void Readdotpos()
{        
     CString filename[12];    //文件中保存的是坐标数据
    int xx,yy;
    for (int i=0;i<3;i++)
    {
        filename[i].Format("E:\\坐标\\IMG_00%i.abs", i);
        Pos_X.push_back(vector<int>());//增加一维计数
        Pos_Y.push_back(vector<int>());//增加一维计数
        CString contents;
        char *ssss, *xyz, tttt[20];
        ssss=new char[50];
        CStdioFile m_file(filename[i],CFile::modeRead);
        while (m_file.ReadString(contents))//按行读取文件数据
        {
            strcpy(ssss,contents);
            xyz=strstr(ssss,"x=" );
            if(xyz!=NULL){ strncpy(tttt,xyz+2,4);xx=(int)atoi(tttt);}
            else xx=0;
            xyz=strstr(ssss,"y=" );
            if(xyz!=NULL){ strncpy(tttt,xyz+2,4);yy=(int)atoi(tttt);}
            else yy=0;
            Pos_X.back().push_back(xx);//保存数据
            Pos_Y.back().push_back(yy);//保存数据
        }
        delete ssss;
        m_file.Close();
} 
二维向量的属性与一维向量相同
  1>. a.size()                 //获取向量中的元素个数
    2>. a.empty()                //判断向量是否为空
    3>. a.clear()                //清空向量中的元素
    4>. 复制
        a = b ;            //将b向量复制到a向量中
    5>. 比较
        保持 ==、!=、>、>=、<、<= 的惯有含义 ;
        如: a == b ;    //a向量与b向量比较, 相等则返回1
    6>. 插入 - insert
        ①、 a.insert(a.begin(), 1000);            //将1000插入到向量a的起始位置前
        ②、 a.insert(a.begin(), 3, 1000) ;        //将1000分别插入到向量元素位置的0-2处(共3个元素)        
        ③、 vector<int> a(5, 1) ;
            vector<int> b(10) ;
            b.insert(b.begin(), a.begin(), a.end()) ;        //将a.begin(), a.end()之间的全部元素插入到b.begin()前
    7>. 删除 - erase
        ①、 b.erase(b.begin()) ;                     //将起始位置的元素删除
        ②、 b.erase(b.begin(), b.begin()+3) ;        //将(b.begin(), b.begin()+3)之间的元素删除
    8>. 交换 - swap
        b.swap(a) ;          //a向量与b向量进行交换     
    9>. a.back();           //获取a向量最后一个元素
    10>. a.front            //获取a向量的第一个元素    
    11>. a.pop_back();      //删除a向量的最后一个元素
    12>.a.capacity(); //返回a在内存中总共可以容纳的元素个数
    13>.a.rezize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
    14>.a.rezize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
//使用下面的函数需要包涵头文件
#include<algorithm>
(1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
(2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

C++ 中,`std::vector` 是标准模板库 (STL) 提供的一个动态数组容器。它可以存储任意类型的元素,并且能够自动调整大小以适应更多元素的添加。 对于二维向量 `std::vector<std::vector<T>>` 来说,它实际上是一个包含多个一维向量向量。为了输出一个二维向量的内容,你需要遍历外层向量以及每个内部的一维向量,并依次打印它们的值。 下面给出一段示例代码用于展示如何创建并输出一个简单的整数型二维向量: ```cpp #include <iostream> #include <vector> int main() { // 定义一个2x3 的二维向量(即有两行三列) std::vector<std::vector<int>> vec = {{1, 2, 3}, {4, 5, 6}}; for(size_t i = 0; i < vec.size(); ++i){ for(size_t j = 0; j < vec[i].size(); ++j){ std::cout << "vec[" << i << "][" << j << "]=" << vec[i][j] << "\t"; } std::cout << '\n'; } return 0; } ``` 此段程序将按照行优先顺序逐个访问二维向量中的所有元素,并将其显示出来。如果你想要更简洁地书写循环部分,则可以利用范围for语句(基于C++11及以上版本),如下所示: ```cpp #include <iostream> #include <vector> int main(){ // 创建同样的测试数据结构 std::vector<std::vector<int>> vec = {{7,8},{9,10},{11,12}}; // 使用range-based for loop 输出内容 for(const auto& row : vec){ for(int elem : row){ std::cout << elem << ' '; } std::cout << '\n'; } return 0; } ``` 这两种方式都能很好地完成对二维向量中各元素的输出任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值