我尝试将矢量 previousVector 复制到C ++中的另一个矢量 currentVector 。
我的代码如下。 我想导航 currentVector 并根据值的条件,在 previousVector 中添加元素。我不确定这是正确的做法。
int ChooseElement(std::vector<Powers>* previousVector) {
std::vector<Powers> currentVector(*previousVector);
for(auto iter = currentVector.begin(); iter != currentVector.end(); iter++ ) {
if(condition on (*iter))
(*previousPowers).push_back(someValue);
}
return 0
}
main(int argc, const char * argv[]){
std::vector<myObjectType> listOfElements;
myObjectType result = myObjectType(1,2);
listOfElements.push_back(result);
result = ChooseElements(&listOfElements);
return 0;
}
答案 0 :(得分:0)
我想导航currentVector并根据值的条件,在previousVector中添加元素。
如果您打算添加您正在迭代的元素,那么这正是std::copy_if的用途:
std::copy_if(currentVector.begin(), currentVector.end(),
std::back_inserter(previousVector), condition_functor);
如果您打算执行代码所做的事情,那么您根本不需要currentVector
,因为它的值似乎不会用于任何事情。您的代码所做的是:它将someValue
添加到previousVector
并执行n
次n
是previousVector
中元素的数量,其条件是真正。如果这确实是你想要的,那么这是一种更简单的方法:
void ChooseElement(std::vector<Powers>& v) {
auto count = std::count_if(v.begin(), v.end(), condition_functor);
v.insert(v.end(), count, someValue);
}
答案 1 :(得分:0)
您的push_back()
应该没问题,因为currentVector
是原始向量的深层副本,因此对previousVector
的操作根本不会影响它。但是这种方法非常无效,请使用临时向量:
int ChooseElement(std::vector<Powers> &previousVector) {
std::vector<Powers> tmp;
for(auto iter = previosVector.begin(); iter != previousVector.end(); iter++ ) {
if(condition on (*iter))
tmp.push_back(someValue);
}
std::move( tmp.begin(), tmp.end(), std::back_inserter( previousVector ) );
return 0;
}
如果您不能使用c ++ 11,请将std::move()
替换为:
previosVector.insert( previosVector.end(), tmp.begin(), tmp.end() );