the*_*nce 0 c++ arrays pointers join
在标题中是否可以将多个数组连接在一起而无需复制并仅使用指针?我花费了大量的计算时间将较小的数组复制到较大的数组中.注意我不能使用向量,因为umfpack(一些矩阵求解库)不允许我或我不知道如何.
举个例子:
int n = 5;
// dynamically allocate array with use of pointer
int *a = new int[n];
// define array pointed by *a as [1 2 3 4 5]
for(int i=0;i<n;i++) {
a[i]=i+1;
}
// pointer to array of pointers ??? --> this does not work
int *large_a = new int[4];
for(int i=0;i<4;i++) {
large_a[i] = a;
}
Run Code Online (Sandbox Code Playgroud)
注意:我已经知道了一个简单的解决方案,只是迭代地将它们复制到一个新的大型数组中,但很高兴知道是否不需要复制在整个程序期间存储的重复块.我正处于学习曲线中.
感谢大家阅读
在标题中是否可以将多个数组连接在一起而无需复制并仅使用指针?
简而言之,没有.
指针只是内存中的一个地址 - 就像一个街道地址.你不能移动两个房子,只需复制他们的地址.你也不能通过改变他们的地址来搬家.改变地址不会移动房子,它指向一个新房子.
注意我不能使用向量,因为umfpack(一些矩阵求解库)不允许我或我不知道如何.
在大多数情况下,您可以在std::vector
期望数组时传递a的第一个元素的地址.
std::vector a = {0, 1, 2}; // C++0x initialization
void c_fn_call(int*);
c_fn_call(&a[0]);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为vector
保证其内容的存储始终是连续的.
但是,当您insert
或erase
来自a的元素时vector
,它会使来自它的指针和迭代器无效.vector
如果已分配的存储必须更改大小,那么您从获取元素地址获得的任何指针都不再指向该指针.