将元素从矢量复制到另一个矢量
copying elements from vector to another one
我有两个指针向量:arr
已经包含一些元素,temp
,我想将特定元素从arr
复制到的新向量。例如,我想复制要复制到temp
并从arr
中删除arr
的第二个元素。怎么能做到呢?
我试过这个,但不好:
void deleteobject(vector < figure3d *> &arr,int index,vector < figure3d *> &temp)
{
vector < figure3d * > :: iterator i=arr.begin();
temp.insert(temp.begin(),*i);
delete *i;
arr.erase(i);
temp[0]->print();
}
您不应该delete
要复制的对象,因为您想将其保留在temp
中 - 只需将其从arr
erase
即可。
arr.begin()
给你一个指向第一个元素的迭代器,所以如果你想要第二个元素,你应该前进i
一个:
++i;
如果你想要第 index
个元素,你应该将i
前进 index
:
i += index;
将原始指针存储在矢量中,并且在从矢量中删除它们时必须记住删除它们,这是等待发生的内存泄漏。在另一个答案中提到的 ass molbdnilo 实际上有一个内存处理错误,因为您正在删除 temp 具有指针的对象。
我了解,您想在指定的索引(参数index
)处复制一个元素并将其从向量temp
中删除。此函数可能看起来像这样简单:
void deleteobject(std::vector<figure3d*> &arr, int index, std::vector<figure3d*> &temp)
{
temp.insert(temp.begin(), arr[index]);
arr.erase(arr.begin() + index);
}
在这种情况下,您不会复制对象本身,而只是复制对它的引用 - 因此您不需要释放存储此对象的内存。
另请注意,在函数中,您调用 delete *i;
它会释放存储 i
所指向对象的内存 - 并且存储在 arr
中的指针变得无效(悬空指针),因为它指向已经释放的内存。
我还建议你使用对象的向量而不是指向对象的指针向量 - 虽然元素被复制,但它通常足够快,并且没有麻烦的内存管理与之连接。并且如果有充分的理由使用指针向量(何时在C++中使用指针),我建议你改用智能指针的向量:如果你有TR1或C++11支持,使用std::shared_ptr
,否则使用boost::shared_ptr
(shared_ptr在哪里?
这看起来像是一份工作!
像这样的事情是我会做的:
Class removePredicate{
Public:
bool operator() (figure3d** item) {
//remove logic goes here
}
};
remove_copy_if(arr.begin(), arr.end(), back_inserter(tmp), not1(removePredicate));
这会将要删除的所有元素复制到 tmp 中。实际上从arr中删除它们只是删除-擦除习语的简单应用:
erase(remove_if(arr.begin(), arr.end(), not1(removePredicate)), arr.end());
可能有一种方法可以将这两个步骤合并为一行,但您冒着失去可读性的风险。
- 矢量如何将数据复制到另一个矢量?
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 链表,将列表复制到另一个列表
- 将指向给定子类的指针从一个向量复制到另一个向量
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 将父类的子类的数据复制到具有相同父类的另一个类
- 使用动态分配将 char* 复制到另一个字符**
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 将字符向量复制到另一个向量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何使用函数将一个对象的输入复制到另一个对象中
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 复制矩阵的一部分并粘贴到另一个矩阵C++上
- std::transform 将一个结构数组复制到另一个结构数组
- 如何避免将向量的完整值复制到另一个容器
- 如何将列表从一个类复制到另一个类
- C++将结构复制到另一个程序的资源
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 如何使用C ++将SQLite数据库中的所有表从一个数据库复制到另一个数据库
- 另一个复制算法