但是如果你想防止一些潜在丑陋的重物的5000个副本(或更多)。只是为了性能并忽略可读代码,您可以这样做
#include <iostream>
#include <vector>
int main(int argc, char* argv[])
{
std::vector<int> v;
int* a = (int*) malloc(10*sizeof(int));
//int a[10];
for( int i = 0; i<10;++i )
{
*(a + i) = i;
}
delete v._Myfirst; // ? not sure
v._Myfirst = a;
for( int i = 0; i<10;++i )
{
std::cout << v[i] << std::endl;
}
system("PAUSE");
return 0;
}
只需替换 _Myfirst 底层“数组”。但要非常小心,这将被向量删除。
- 在某些情况下,我的第一次删除/释放是否失败?
- 这取决于分配器吗?
- 有交换吗?有全新的向量交换,但是从数组中呢?
我必须与无法修改的代码(政治原因)进行交互,它为我提供了对象数组,并且必须使它们成为对象的向量。
指针似乎是正确的解决方案,但它有很多内存跳转,无论如何我都必须执行循环。我只是想知道是否有某种方法可以避免复制并告诉向量,“现在这是你的底层数组”。
我同意以上内容非常难看,这就是为什么我实际上保留并推送我的真实代码。我只是想知道是否有办法避免循环。
请不要用循环和推回来回答,因为显然这就是我的“真实”代码已经在做的事情。如果没有执行此交换的功能,我们可以实现一个安全的吗?