动态二维数组的传参与删除

昨晚有道编程题,题目不难,但是写代码卡在了很多小问题上,才发现对于c++的基础知识很多其实是不清楚的

1、首先,对于面向行的输入

int a,b;

cin>>a;

cin>>b;

这就是面向行的输入,如果一行输入两个数值,空格间隔

cin>>a>>b;

对于字符串

数组型;

char str[100];

gets(str);

strlen(str);

字符串型:

string s;

getline(s);

int len=s.size();//为了兼容标准库所以可以用size

2、二维动态数组的传参

指针数组先来看一维的

int main(void)

{

int a;

cin>>a;

 int *p=new int[a];

ceshi(p,a);//需要传地址和长度

delete [] p;

}

void ceshi(int * p,int len)

{


}

这个是vector

int main(void)

{

vector<int> vec;

}

void ceshi(vector<int>&vec)

{

}


二维的,我直接上昨晚的洗牌的编程代码吧,举例洗牌过程123456,635241。。。这个题目是所有的输入完成之后再输出的,所以必须用动态二维数组

#include <iostream>  
#include <string>  
#include <vector>
using namespace  std; 

void xipai(int **p,int count,int k,int len)
{
  int *temp=new int[len];
  int j=0;


  while(k--)
  {
  
   int end=len-1;
   int start=len/2-1;
   while(end!=(len/2-1)&&start!=-1)
   {
  temp[j++]=p[count][end];
  temp[j++]=p[count][start];
  end--;
  start--;  
   }
    for(int i=0;i<len;i++)
  {
   j--;
   p[count][i]=temp[j];
//cout<<p[count][i]<<" ";
  }


 
 }
   delete [] temp;
}
int main()  
{  
    int count=0;
int num1,num2,num3;
int len=0;
cin>>num1;
int **p=new int*[num1];
int *numlen=new int [num1];
while(count<num1)
{
 cin>>num2>>num3;
 p[count]=new int [num2*2];
 numlen[count]=num2*2;
 for(int i=0;i<num2*2;i++)
 {
int a;
        cin>>a;
p[count][i]=a;
 
 }


 xipai(p,count,num3,num2*2);
 count++; 
}

for(int i=0;i<num1;i++)
{

int num=0;
   cout<<p[i][num];
num++;
while(num<numlen[i])
{
 cout<<" "<<p[i][num];
 num++;
}
cout<<endl;
  delete[] p[i];//二维动态数组的删除
}
    return 0;  
delete[] p;//分的两部
}

#include <iostream>  
#include <string>  
#include <vector>
using namespace  std; 
void xipai( vector<vector<int> >&vec,int count,int k)
{
  int len=vec[count].size();
  int *temp=new int[len];
  int j=0;
  while(k--)
  {
  
   int end=len-1;
   int start=len/2-1;
   while(end!=(len/2-1)&&start!=-1)
   {
  temp[j++]=vec[count][end];
  temp[j++]=vec[count][start];
  end--;
  start--;  
   }
    for(int i=0;i<len;i++)
  {
   j--;
   vec[count][i]=temp[j];
//cout<<vec[count][i]<<" ";
  }


 
 }
   delete [] temp;
}
int main()  
{  
  
   int num1,num2,num3;
   cin>>num1;
   int count=0;
    vector<vector<int> >vec(num1);
   while(count<num1)
   {
     cin>>num2>>num3;

for(int i=0;i<num2*2;i++)
{
 int m;
 cin>>m;
 vec[count].push_back(m);
}
 xipai(vec,count,num3);
 count++;
   }
   for(int i=0;i<num1;i++)
{

int num=0;
   cout<<vec[i][num];
num++;
while(num<vec[i].size())
{
 cout<<" "<<vec[i][num];
 num++;
}
cout<<endl;
 
}
return 0;
  

vector的另外一种写法

#include <iostream>  
#include <string>  
#include <vector>
using namespace  std; 
void xipai( vector<int >&vec,int k,int len)
{
 // int len=vec.size();
 // int *temp=new int[len];
  vector<int >vec1;
 
  while(k--)
  {
    vec1=vec;
   int end=len-1;
   int start=len/2-1;
   int j=0;
   while(end!=(len/2-1)&&start!=-1)
   {


  vec[j++]=vec1[end];
  vec[j++]=vec1[start];
  end--;
  start--;  
   }
    
 
 }
   
}
int main()  
{  
  
   int num1,num2,num3;
   cin>>num1;
   int count=0;
    vector<vector<int> >vec;
   while(count<num1)
   {
     cin>>num2>>num3;
vector<int> vec2;
for(int i=0;i<num2*2;i++)
{
 int m;
 cin>>m;
 vec2.push_back(m);
}
 xipai(vec2,num3,num2*2);
 count++;
 vec.push_back(vec2);
   }
   for(int i=0;i<vec.size();i++)
{

int num=0;
   cout<<vec[i][num];
num++;
while(num<vec[i].size())
{
 cout<<" "<<vec[i][num];
 num++;
}
cout<<endl;
 
}
return 0;
  

删除元素:  

 vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

清空:vec.clear();

int main(void)
{
int a[][] = { {1, 2}, {3, 4}, {5, 6} };
// a[2][0]   []的优先级高于*
printf("%d\n", *(a + 1)[1]);//等价于a[i+j][0]
// a[1][1]
printf("%d\n", (*(a + 1))[1]);//等价于a[i][j]

}


int** p=new int *[10];
 for(int i=0;i<10;i++)
 {
  p[i]=new int[10];
 }
	
 for(int i=0;i<10;i++)
 {
  delete[]p[i];
 }
 delete[]p;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值