none
vector< vector<int> > 转 int ** RRS feed

  • 问题

  • 我用一个工具包,里面函数用C写的,其中二维数组函数形参用int**,我写程序用C++STL,凡用到二维数组处均用vector< vector<int> >。
    问题是如何转换?
    一维数组好办&vector[0]就可以变成形参int*
    有没有好的解决办法?前提是不能修改库函数。
    2010年1月15日 3:49

答案

  • 呵呵,这个你只能是构造一个数组,然后把vector中的数据取出来放进去,然后再传入那个函数库。
    #include <vector>
    #include <iostream>
    using namespace std;
    
    
    // 模拟库函数,以int** 做为参数
    // p = 二维数组首地址; x = 行数; y = 列数
    void ShowIntArray(int** p, int x, int y)
    {
    	if(NULL == p || x <= 0 || y <= 0)
    		return;
    
    	char buf[36];
    	::memset(buf, 0, sizeof(buf));
    	int* p1 = NULL;
    	for(int i = 0; i < x; i++)
    	{
    		p1 = p[i];
    		for(int j = 0; j < y; j++)
    		{
    			::itoa(p1[j], buf, 10);
    			cout << buf;
    			::memset(buf, 0, sizeof(buf));
    		}
    
    		cout << endl;
    	}
    }
    // 主函数
    int _tmain(int argc, _TCHAR* argv[])
    {
    	// 定义类型
        typedef vector<vector<int>> inta;
    	typedef vector<int> intb;
    
    	inta a;
    	//// 构造一个容器, 10行 0-9 的数列
    	for(int i = 0; i < 10; i++)
    	{	
    		intb b;
    		for(int j = 0; j < 10; j++)
    		{
    
    			b.push_back(j);
    		}
    		a.push_back(b);
    	}
    	
    	// 假设不知道vector 容器的大小
    	int** p = NULL;
    	p = new int*[a.size()]; // 构件行
    	int* p1 = NULL;
    	int i = 0;
    	for(inta::iterator iter1 = a.begin(); iter1 < a.end(); iter1 ++)
    	{
    
    		intb b = *iter1;
    		p[i] = new int[b.size()];
    		
    		int j = 0;
    		for(intb::iterator iter2 = b.begin(); iter2 < b.end(); iter2 ++)
    		{
    			p[i][j] = *iter2;
    			j++;
    		}
    
    		i++;
    	}
    
    
    	// 调用C的库函数
    	ShowIntArray(p, 10, 10);
    
    
    	// 清理
    	for(int k = 0; k < a.size(); k++)
    	{
    		delete[] p[k];
    		p[k] = NULL;
    	}
    
    	delete[] p;
    	p = NULL;
    
    	getchar();
    
    	return 0;
    }
    
    • 已标记为答案 Nancy Shao 2010年1月20日 8:54
    2010年1月15日 5:03
    版主