c++如何通过复制将结构 vector 复制到另一个结构 vector 中

标签 c++ vector struct

如何将结构 vector 复制到另一个结构 vector 中,例如:

让第一个和第二个 vector 为:

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;
}

最佳答案

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]);
}

这是快速修复。

没有理由先创建新元素,然后再推送它们。

关于c++如何通过复制将结构 vector 复制到另一个结构 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108856/

相关文章:

c - 如何返回第三个结构中两个结构值之间的差异?

c++ - 从 800x600 中提取 800 和 600

c++ - 大括号括起来的初始化列表中的左值引用初始化无法编译

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?

c++ - 如何为 3D vector 中未使用的元素释放内存?

c - pthreads 不能正常工作

c++ - 使用 QStyledItemDelegate 调整 QStandardItem 的选择行为

c++ - VC++ "Re-use"一个函数?

javascript - SVG 不在 Firefox 中呈现字体(适用于 IE9 和 Chrome)

c# - 结构 - Layout.Explicit - 构造函数 - 完全分配字段