2014-09-29 54 views
0

如何複製結構的載體導入結構的另一個載體如:C++如何結構的載體複製到結構的另一向量,其具有一種重複

讓第一和第二矢量爲:

std::vector <myStruct> OriginalVector 
std::vector <myStruct> NewVector 

其中:

struct Linkedvalues{ 
    int indx; 
    double Val; 
}; 

struct myStruct{ 
    std::vector<int> Id; 
    double avg; 
    std::vector<Linkedvalues> lValues; 
    double sum= 0.0; 
}; 

在我的計劃,我充滿OriginalVector,我需要在NewVector與這種重複複製其值:

OriginalVector具有以下值:

{ (1, 2), 0.6, {(1, 0.5), (3,0.1), (5,0.7)}, 1.5 } 
{ (1, 3), 0.5, {(1, 0.2), (4,0.9), (5,0.7)}, 3.1 } 
{ (2, 3), 0.1, {(3, 0.4), (2,0.2), (5,0.7)}, 4.2 } 
{ (3, 5), 0.3, {(2, 0.1), (3,0.6), (5,0.7)}, 7.5 } 

我想創建NewVector爲:

{ (1, 2), 0.6, {(1, 0.5), (3,0.1), (5,0.7)}, 1.5 } 
{ (2, 1), 0.6, {(1, 0.5), (3,0.1), (5,0.7)}, 1.5 } // also add the same previous 
                //vector but swap (1,2) to (2,1) 

{ (1, 3), 0.5, {(1, 0.2), (4,0.9), (5,0.7)}, 3.1 } 
{ (3, 1), 0.5, {(1, 0.2), (4,0.9), (5,0.7)}, 3.1 } // also add the same previous 
                //vector but swap (1,3) to (3,1) 

{ (2, 3), 0.1, {(3, 0.4), (2,0.2), (5,0.7)}, 4.2 } 
{ (3, 2), 0.1, {(3, 0.4), (2,0.2), (5,0.7)}, 4.2 } //also add the same previous 
                //vector but swap (2,3) to (3,2) 

{ (3, 5), 0.3, {(2, 0.1), (3,0.6), (5,0.7)}, 7.5 } 
{ (5, 3), 0.3, {(2, 0.1), (3,0.6), (5,0.7)}, 7.5 } //also add the same previous 
                //vector but swap (3,5) to (5,3) 

爲了做到這一點,我做了以下內容:

int i=0; 
while (i < OriginalVector.size()) 
{ 
auto it = (std::make_pair(OriginalVector[i].id.front(), OriginalVector[i].id.back())); 
auto itt = (std::make_pair(OriginalVector[i].id.back(), OriginalVector[i].id.front())); 

// Here I fail to insert it and itt with the rest of OriginalVector[i] members into NewVector 
++i; 
} 
+0

那麼,有沒有對''在這些結構在所有。我錯過了什麼嗎? – 2014-09-29 21:05:02

+1

但大小2的'矢量'不是一對。這不僅僅是類型系統的工作方式。您可能正在尋找像'vector (OriginalVector [i] .id.front(),OriginalVector [i] .id.back())' – 2014-09-29 21:11:56

+2

如果第一個vector真的總是存儲兩個元素,那麼您應該認真考慮將它作爲一個'std :: pair','std :: tuple'或'std :: array'。效率更高。 – Deduplicator 2014-09-29 21:19:11

回答

3
std::vector <myStruct> NewVector; 
NewVector.reserve(OriginalVector.size()*2); 
for(auto&& v : OriginalVector) { 
    NewVector.push_back(v); 
    NewVector.push_back(v); 
    auto& x = NewVector[NewVector.size()-1].Id; 
    std::swap(x[0], x[1]); 
} 

這就是quic k修復。

沒有理由先創建新的元素,然後之後把他們。

相關問題