不通过拷贝 把数组a 和数组b的数据移到数组 c,该怎么处理
不通过拷贝 把数组a 和数组b的数据移到数组 c
int a[5]={1,2,3,4,5};
int b[5]={6,7,8,9,10};
int c[10];
也就说 数组 c应该为 {1,2,3,4,5,6,7,8,9,10}
------解决方案--------------------
不可能
------解决方案--------------------
觉活!办法有挨个装容器,不过好象觉得没这个必要了吧
------解决方案--------------------
Mark
------解决方案--------------------
不拷贝,是不逐个拷贝吧
memcpy(c, a, sizeof(a));
memcpy(c + sizeof(a) / sizeof(int), b, sizeof(b));
------解决方案--------------------
不懂什么是拷贝,c[0] = a[0]算不算拷贝?
------解决方案--------------------
不通过拷贝啊,好像有点难度
------解决方案--------------------
std::merge(a,a+5,b,b+5,c);
------解决方案--------------------
见识了,不通过嘴也可以吃饭?
------解决方案--------------------
#include <iostream>
struct MyInt
{
MyInt(int (&a)[5], int(&b)[5])
:A(a), B(b)
{
}
int& operator[](int idx)
{
if (idx <5) return A[idx];
else return B[idx-5];
}
int (&A)[5];
int (&B)[5];
};
int main()
{
int a[5]={1,2,3,4,5};
int b[5]={6,7,8,9,10};
MyInt c(a, b); //c[i]={1,2,3,4,5,6,7,8,9,10} now :)
for(int i=0; i <10; ++i) std::cout < <c[i] < <std::endl;
}
------解决方案--------------------
std::merge(a,a+5,b,b+5,c);
> > 效率高不??
不高
------解决方案--------------------
把他们放到一个结构体里面是吗??
==============
结构里保存的是a, b的引用, 没有拷贝数组元素.
但是, 通过重载的[]索引访问元素时,
需要通过判断下标的大小来访问不同的数组.所以
不见得效率高:)
------解决方案--------------------
说原始需求。数据不拷贝是不可能迁移的。
------解决方案--------------------
如果是纯数据类型,当然是memcpy
为了万全,当然是STL的copy算法,在最优化的编译下,对纯数据类型是调用memcpy实现的。
------解决方案--------------------
数组c里面存放分别指向数组a和数组c的每个元素指针
------解决方案--------------------
for(i=0;i <5;i++)
c[i]=(int*)(a+i)
for(i=0;i <5;i++)
c[5+i]=(int*)(a+i)
LS的LS是这个意思?好像有点差强人意
------解决方案--------------------
错了 是这个
for(i=0;i <5;i++)
c[i]=(int)(a+i)
for(i=0;i <5;i++)
c[5+i]=(int)(a+i)
------解决方案--------------------
除非这样定义:
int c[10] = {1,2,3,4,5,6,7,8,9,10};
int *a = c;
int *b = c + 5;
要不然只能是lightnut() 说的办法了……
------解决方案--------------------
akirya(坏[其实偶不是什么所谓的坏人]) ( ) 信誉:100 Blog 加为好友 2007-06-13 09:53:54 得分: 0
std::merge(a,a+5,b,b+5,c);
============================
这个是错误滴。。
merge是对两个排序后的容器合并的
改改数据
int a[5]={1,2,3,4,10};
int b[5]={6,7,8,9,10};
1 2 3 4 6 7 8 9 10 10
int a[5]={1,2,3,4,5};
int b[5]={6,7,8,9,10};
int c[10];
也就说 数组 c应该为 {1,2,3,4,5,6,7,8,9,10}
------解决方案--------------------
不可能
------解决方案--------------------
觉活!办法有挨个装容器,不过好象觉得没这个必要了吧
------解决方案--------------------
Mark
------解决方案--------------------
不拷贝,是不逐个拷贝吧
memcpy(c, a, sizeof(a));
memcpy(c + sizeof(a) / sizeof(int), b, sizeof(b));
------解决方案--------------------
不懂什么是拷贝,c[0] = a[0]算不算拷贝?
------解决方案--------------------
不通过拷贝啊,好像有点难度
------解决方案--------------------
std::merge(a,a+5,b,b+5,c);
------解决方案--------------------
见识了,不通过嘴也可以吃饭?
------解决方案--------------------
#include <iostream>
struct MyInt
{
MyInt(int (&a)[5], int(&b)[5])
:A(a), B(b)
{
}
int& operator[](int idx)
{
if (idx <5) return A[idx];
else return B[idx-5];
}
int (&A)[5];
int (&B)[5];
};
int main()
{
int a[5]={1,2,3,4,5};
int b[5]={6,7,8,9,10};
MyInt c(a, b); //c[i]={1,2,3,4,5,6,7,8,9,10} now :)
for(int i=0; i <10; ++i) std::cout < <c[i] < <std::endl;
}
------解决方案--------------------
std::merge(a,a+5,b,b+5,c);
> > 效率高不??
不高
------解决方案--------------------
把他们放到一个结构体里面是吗??
==============
结构里保存的是a, b的引用, 没有拷贝数组元素.
但是, 通过重载的[]索引访问元素时,
需要通过判断下标的大小来访问不同的数组.所以
不见得效率高:)
------解决方案--------------------
说原始需求。数据不拷贝是不可能迁移的。
------解决方案--------------------
如果是纯数据类型,当然是memcpy
为了万全,当然是STL的copy算法,在最优化的编译下,对纯数据类型是调用memcpy实现的。
------解决方案--------------------
数组c里面存放分别指向数组a和数组c的每个元素指针
------解决方案--------------------
for(i=0;i <5;i++)
c[i]=(int*)(a+i)
for(i=0;i <5;i++)
c[5+i]=(int*)(a+i)
LS的LS是这个意思?好像有点差强人意
------解决方案--------------------
错了 是这个
for(i=0;i <5;i++)
c[i]=(int)(a+i)
for(i=0;i <5;i++)
c[5+i]=(int)(a+i)
------解决方案--------------------
除非这样定义:
int c[10] = {1,2,3,4,5,6,7,8,9,10};
int *a = c;
int *b = c + 5;
要不然只能是lightnut() 说的办法了……
------解决方案--------------------
akirya(坏[其实偶不是什么所谓的坏人]) ( ) 信誉:100 Blog 加为好友 2007-06-13 09:53:54 得分: 0
std::merge(a,a+5,b,b+5,c);
============================
这个是错误滴。。
merge是对两个排序后的容器合并的
改改数据
int a[5]={1,2,3,4,10};
int b[5]={6,7,8,9,10};
1 2 3 4 6 7 8 9 10 10