如何将结构 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/