peregrine,
поправил код для наглядности:
#include <iostream>
using namespace std;
template <class X> inline void copyArray (X *dest, X *input, int len, int startPoint=0) {
for(register int i=0; i<len; i++) dest[i+startPoint]=input[i];
}
template <class X> void append(X *dest, X *input, int lenOfDest, int lenOfInput=1) {
X *temp=new X [lenOfDest];
copyArray(temp, dest, lenOfDest);
delete [] dest;
dest = new X [lenOfDest+lenOfInput+1];
copyArray(dest, temp, lenOfDest);
delete [] temp;
copyArray(dest, input, lenOfInput, lenOfDest);
cout << "dest:" << endl;
for(register int i=0; i<10; i++) cout << dest[i] << endl;
}
int main() {
int *a=new int [5];
for (int i=0; i<5; i++) a[i]=i+3;
int *b=new int [3];
for (int i=0; i<3; i++) b[i]=i+8;
append(a,b,5,3);
cout << "a:" << endl;
for(register int i=0; i<10; i++) cout << a[i] << endl;
return 0;
}
вывод:
dest:
3
4
5
6
7
8
9
10
0
0
a:
0
0
5
6
7
0
33
0
8
9
хотя dest и a - указатели на один и тот-же массив
JmAbuDabi,
там много чего есть, только не в том виде
Пользователь решил продолжить мысль 26 Августа 2013, 03:18:12:
закралось подозрение, что дело в разрушении dest, проверил:
#include <iostream>
using namespace std;
template <class X> inline void copyArray (X *dest, X *input, int len, int startPoint=0) {
for(register int i=0; i<len; i++) dest[i+startPoint]=input[i];
}
template <class X> X *append(X *dest, X *input, int lenOfDest, int lenOfInput=1) {
X *temp=new X [lenOfDest];
copyArray(temp, dest, lenOfDest);
delete [] dest;
dest = new X [lenOfDest+lenOfInput+1];
copyArray(dest, temp, lenOfDest);
delete [] temp;
copyArray(dest, input, lenOfInput, lenOfDest);
return dest;
}
int main() {
int *a=new int [5];
for (int i=0; i<5; i++) a[i]=i+3;
int *b=new int [3];
for (int i=0; i<3; i++) b[i]=i+8;
a=append(a,b,5,3);
for(register int i=0; i<9; i++) cout << a[i] << endl;
return 0;
}
вывод:
3
4
5
6
7
8
9
10
0
непонятно, почему такое происходит