c++ - 如何将 vector 列表中的对象复制到另一个 vector 列表?

标签 c++ stl vector

我想将第一个 vector 的对象复制到第二个 vector ,但是当我删除第二个 vector 时,第一个 vector 的内容不应更改。 我该怎么做?

代码:

typedef vector<CLog*> CLogData;

CLogData CMultiThreadedDlg::CopyLogData()
{
CLogData logdata;
for(size_t i = 0; i < m_pThreadInfo->GetLog().size()-1; ++i)
{
  CLog* plog = new CLog(*m_pThreadInfo->GetLog()[i]);
  logdata.push_back(plog);
}
return logdata;
}

DeleteData(logdata); 

void CMultiThreadedDlg::DeleteData(CLogData tLogData)
{
for(size_t i = 0; i < tLogData.size()-1; ++i)
{
    CLog* log = (CLog*)tLogData[i];
    delete log;
}

tLogData.clear();
 }

我的代码中的问题是,在删除第二个 vector 时,第一个 vector 即 m_pThreadInfo->getLog() 内容也被删除了..

如何克服这个问题?

编辑:

     CLog::CLog()
     {
        m_threadname = new char[20];
     }
     CLog::~CLog()
     {
           delete[ ] m_threadname;
     }

如果我使用 CLog 作为 vector 列表的参数..我该如何删除它..

谢谢...

最佳答案

哦,伙计。您的代码中存在一些严重的问题。

首先,你有

class CLog
{
    char* m_threadname;

public:

    CLog()
    {
        m_threadname = new char[20];
    }

    ~CLog()
    {
        delete[ ] m_threadname;
    }
};

它是 C++,年份是 2011 年,请不要那样做。如果你这样做了,不要以性能为理由。相反,这样做:

class CLog
{
    std::string m_threadname;
};

看!

其次,您复制带有指针元素 a 的 vector ,当第一个 vector 的元素消失而第二个 vector 的元素被删除时,您会感到惊讶。这是相同的元素,你知道的。 vector 只是一个容器,而不是所有者。作为程序员,您拥有这些元素。 vector 只是持有它们。

你可以使用

typedef vector<shared_ptr<CLog>> CLogData;

解决您的问题。或者,最好

typedef vector<CLog> CLogData;

在没有其他证明之前,这甚至更好。你没有给出一个很好的理由为什么这是一个坏主意。

使用堆栈,它是你的 friend 。

编辑:

此外,您需要按顺序获取引用资料。在

void CMultiThreadedDlg::DeleteData(CLogData tLogData)
{
    for(size_t i = 0; i < tLogData.size()-1; ++i)
    {
        CLog* log = (CLog*)tLogData[i];
        delete log;
    }

    tLogData.clear();
}

您将 vector copy 传递给DeleteData,拷贝将被.clear() 编辑,而不是原始的。可能很危险,如果它在附近徘徊并且您认为它有有效的指针,而实际上它没有。

关于c++ - 如何将 vector 列表中的对象复制到另一个 vector 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5576731/

相关文章:

c++ - 在 Vector<RECT> 数组中显示值

matlab - 在不对结果进行排序的情况下查找元胞向量的唯一值

c++ - 如何在 Ubuntu 中创建一个圆角窗口?

C++11 main() 返回时终止线程?

c++ - 尝试使用 vector 时出错

c++ - 如何检测一个容器是否保证有序列存储

c++ - 在订购的容器中进行自定义排序

c++ - 如何在 openGL 中获取同质屏幕空间坐标

c++ - 在 C++ 中写入二维数组会出现 'invalid types for array subscript' 错误

c++ - 将 ""键插入 map