2011-03-28 16 views
0

我想將結構從一個向量複製到mfc中的另一個向量。如何在Vector中使用複製功能?

我的矢量結構

 typedef vector<CLog *> CLogData; 

    typedef vector<CLog * > tLogData; 

如何將TYPE堵塞*從CLogData複製到tLogData?

問候,

KARTHIK

+0

有什麼東西在文檔的'VECTOR'被混淆嗎? – 2011-03-28 12:27:14

+0

你的意思是你需要複製指針指向的對象嗎?在向量中存儲指針而不是對象的原因是什麼? – 2011-03-28 12:39:54

+0

爲什麼你在這裏有兩個相同的'typedef'? – 2011-03-28 12:47:56

回答

1

如果你想CLog*指針的淺拷貝,使用MacGucky給出了答案。如果您需要CLog*指針指向實際數據的深層副本,你需要手動做一個循環:

CLogData cl; 
tLogData tl; 
// fill cl 
for(size_t i = 0; i < cl.size(); ++i){ 
    // invokes the copy ctor of CLog 
    CLog* plog = new CLog(*cl[i]); 
    tl.push_back(plog); 
} 
1

要一個載體複製到另一個你可以通過兩種方式使用std::copy

1)調整目標載體和複製的迭代器:

tlogData.clear(); 
tlogData.resize(CLogData.size()); 
std::copy(CLogData.begin(), CLogData.end(), tLogData.begin()); 

2)使用back_inserter:

std::copy(CLogData.begin(), CLogData.end(), std::back_inserter(tLogData)); 

但是,只複製從一個向量到另一個向量的指針 - 指針指向兩個向量中的相同對象!


如果你想真正複製的對象,你必須創建新的:

size_t n = CLogData.size(); 
for (size_t i = 0; i < n; ++i) { 
    tLogData.push_back(new CLog(*CLogData[i])); 
} 

這隻有CLog有一個拷貝構造函數。

+0

我不喜歡these.but它會拋出runtimeerror它將指向vector.h且誤差線是_SCL_SECURE_VALIDATE_RANGE( \t \t \t _Myptr + _off <=((_Myvec *)(這 - > _ Getmycont())) - > _Mylast && \t \t \t _Myptr + _Off> =((_Myvec *)(this - > _ Getmycont())) - > _ Myfirst); – karthik 2011-03-28 12:30:44

+0

除非您先調整目標容器的大小,否則您需要爲'copy'使用'back_inserter'迭代器。 – Nim 2011-03-28 12:39:17

+0

是的,抱歉,我忘記了back_inserter。我糾正了我的例子,並添加了兩種方式。 – MacGucky 2011-03-28 12:44:12

1

兩種類型都是一樣的。所以,你可以做

CLogData cl; 
tLogData tl; 
// todo: fill cl 

tl = cl; 
+0

這隻會指出參考。 – karthik 2011-03-28 12:35:16

+4

@Karthik - 這不是Java! ;) – Nim 2011-03-28 12:37:47

+0

@Nim我很確定,即使指針存儲在容器中,OP也想要一個完整的深層副本。 – 2011-03-28 13:21:17