int * * data = 0 ; //初始化一个二维数组 data = new int * [ row ] ; //建立包含row个指针的指针数组 for ( int i = 0 ; i < row ; i ++ ) * ( data + i ) = new int [ col ] ; //每个一维指针数组的长度都是col for ( int i = 0 ; i < row ; i ++ ) for ( int j = 0 ; j < col ; j ++ ) data [ i ] [ j ] = i + j ; //随便定义元素 return data ; int main ( ) int row = 5 ; int col = 8 ; int * * data = func ( row , col ) ; for ( int i = 0 ; i < row ; i ++ ) for ( int j = 0 ; j < col ; j ++ ) if ( j < col - 1 ) cout << data [ i ] [ j ] << "\t" ; cout << data [ i ] [ j ] << endl ; return 0 ;
0       1       2       3       4       5       6       7
1       2       3       4       5       6       7       8
2       3       4       5       6       7       8       9
3       4       5       6       7       8       9       10
4       5       6       7       8       9       10      11

其实这样用指针并不好,容易出现空指针、越界等问题。

2、返回 vector<vector>

vector是一个类模板而非类型,vector、vector<vector>等才是类型。

关于二维vector的元素插入方式可参考博客:关于C++中vector<vector >的使用

使用vector时一定要注意容量和下标的问题,尤其要用下标赋值时,要先确定vector是否为空以及容量是否足够。最安全的方法是组合使用 v.push_back() 、v.pop_back() 和 v.clear()

code:

#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> func(int row,int col)
    vector<vector<int>> data;    //二维vector
    vector<int> data_row(col);   //存放每行数据的一维vector
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
            data_row[j]=i+j;     //使用下标对vector赋值时要注意vector容量是否足够
        data.push_back(data_row);
    return data;
int main()
    int row = 5;
    int col = 8;
    vector<vector<int>> data = func(row, col);
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            if (j < col - 1)
                cout << data[i][j] << "\t";
                cout << data[i][j] << endl;
    return 0;
0       1       2       3       4       5       6       7
1       2       3       4       5       6       7       8
2       3       4       5       6       7       8       9
3       4       5       6       7       8       9       10
4       5       6       7       8       9       10      11

3、二维数组 vs 二维vector

3.1 二维数组

因为C++规定多维数组初始化时一定要给出列数,行数可以缺省,所以二维数组中每个子数组的元素数量一定相同。如果初始化时数量不相同,则用默认值补全。

#include <iostream>
using namespace std;
int main()
    int data[][5] = {{1,2,3},
    				{4,5,6,7}, 
    				{8,9,10,11,12}};
    for(auto &row:data)   //注意这里是引用 &row,因为row是个指针
        for(auto col:row)
            cout<<col<<'\t';
        cout<<endl;
    return 0;
1       2       3       0       0
4       5       6       7       0
8       9       10      11      12

可以发现,每行元素数量必须相同。但在实际应用中,多维数组中的每个子数组元素数量并不一定相同,因此数组就显得不那么人性化了,这种情况就可以考虑使用二维 vector。

上面的例子用了C++11的新语法:范围for循环。要注意使用范围for循环对二维数组进行迭代时,第一层循环的 row 要用引用,因为 row 不是普通的数组元素,而是子数组首元素的指针。

3.2 二维 vector : vector<vector>

二维 vector 中,每个子vector 的长度可以不相同。如以下例子:

#include <iostream>
#include <vector>
using namespace std;
int main()
    vector<vector<int>> data = {{1,2,3},
                                {4,5,6,7},
                                {8,9,10,11,12}};
    for(auto row:data)
        for(auto col:row)
            cout<<col<<'\t';
        cout<<endl;
    cout<<"每个子vector的长度:"<<endl;
    for(auto row:data)
        cout<<row.size()<<'\t';
    return 0;
1       2       3
4       5       6       7
8       9       10      11      12
每个子vector的长度:
3       4       5
                    C++一个很头疼的事情就是只能返回一个值,想要返回多个值只能将这些值存在数组中,返回一个数组。下面实现一个简单的返回二维数组的函数:#include &lt;iostream&gt;using namespace std;int **func(int row,int col){		//初始化一个row*col的二维数组	int **data = 0;	data = (int**)new int*[row];   //建立row个一位数组	for (int i = 0; i &lt; r
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i
				
c语言,c++函数返回一个数组,二维数组 与其他高级语言相比,c语言,c++ 最大的不方便之处就是 函数只能返回一个数值。若要返回一个数组,必须用到指针以及动态分配内存。 这是一个坎,就如学吉他时的大横按一样,不少人在这个坎上望而却步。 我前几年一直看不懂,最近重温c 与c++的动态内存,发现忽然明白会用了。可能经过这几年大量的编程,越来越具有程序员思维了吧. 方法之一:返回一个结构体,结构体里面...
vector&amp;amp;amp;lt;int&amp;amp;amp;gt; vector&amp;amp;amp;lt;float&amp;amp;amp;gt; 与opencv结合使用时可能还会有: vector&amp;amp;amp;lt;Point&amp;amp;amp;gt;,vector&amp;amp;amp;
在[1]对常用的STL容器进行了概览,笔者在刷题过程中经常需要查询一些STL容器函数,实为不便,因此在此对STL容器中常用的操作进行笔记。 std::vector是一种线性数组,每个元素的数据类型都相同,不过和一般的静态的数组不同的是,其允许通过插入元素,删除元素实现所谓的动态数组,是常用的数据结构,类似于python中的列表list。 其涉及到的常用操作有几大类: 初始化操作,涉及到初始化...
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.           1.文件包含:                 首先在程序开头处加上#include以包含所需要的类文件vector           还有一定要加上using name
void 函数名( vector< int> obj ); void 函数名( vector< int>* pobj ); void 函数名( const vector< int>* pobj ); // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数 void 函数名( vector< int>& obj );
要获取二维整数向量的行数和列数,可以使用 vector 类的 size() 函数来获取行数,以及行向量的 size() 函数来获取列数。具体而言,二维整数向量的行数可以通过 mat.size() 获取,而列数则可以通过 mat[0].size() 获取。需要注意的是,在获取二维整数向量的列数之前,需要确保该向量非空且存在至少一个行向量,否则会出现访问越界的问题。 例如,以下代码可以获取二维整数向量 mat 的行数和列数: ```c++ int rows = mat.size(); // 获取行数 int cols = 0; // 列数初始化为 0 if (rows > 0) { // 如果二维向量不为空 cols = mat[0].size(); // 获取列数 这里首先获取二维整数向量的行数,如果行数大于 0,则说明该二维向量不为空,可以获取第一个行向量的 size() 函数来获取列数。
【AutoML--模型搜索】论文阅读:Once-for-All: Train One Network and Specialize it for Efficient Deployment NMS(非极大值抑制)的 Python 实现 AIGC书籍推荐:《生成式深度学习的数学原理》