Существует вопрос о том, как объединить два вектора: Concatenating two std::vectors. Тем не менее, я счел целесообразным начать новую, так как мой вопрос немного более конкретно ....Как объединить многие std :: векторы?
У меня есть два класса, которые выглядят следующим образом:
class AClass {
public:
std::vector<double> getCoeffs() {return coeffs;}
private:
std::vector<double> coeffs;
};
class BClass {
public:
std::vector<double> getCoeffs() {return ...;}
private:
std::vector<AClass> aVector;
};
Что является лучшим способом (т.е. избегать ненужного копирования и т. д.), чтобы объединить коэффициенты от каждого элемента в aVector?
Моя самая первая попытка была
std::vector<double> BClass::getCoeffs(){
std::vector<double> coeffs;
std::vector<double> fcoefs;
for (int i=0;i<aVector.size();i++){
fcoefs = aVector[i].getCoeffs();
for (int j=0;j<fcoefs.size();j++{
coeffs.push_back(fcoefs[j]);
}
}
return coeffs;
}
Я уже знаю, как избежать внутренней цикл (благодаря вышеупомянутой должности), но я уверен, что, что с помощью некоторого станд алгоритма этой может выполняться в одной строке.
Я не могу использовать C++ 11 на данный момент. Тем не менее, мне также будет интересно, как это сделать на C++ 11 (если есть преимущество перед «no C++ 11»).
EDIT: Я попытаюсь немного перефразировать вопрос, чтобы сделать его более понятным. Конкатенация двух векторов может быть выполнена через вставку. Для моего примера я бы использовал это:
std::vector<double> BClass::getCoeffs(){
std::vector<double> coeffs;
std::vector<double> fcoefs;
for (int i=0;i<aVector.size();i++){
fcoefs = aVector[i].getCoeffs();
coeffs.insert(coeffs.end(),fcoefs.begin(),fcoefs.end());
}
return coeffs;
}
Можно ли избежать цикла for? я мог себе представить, что можно написать что-то вроде
for_each(aVector.begin(),aVector.end(),coeffs.insert(coeffs.end(),....);
это помогает: http: //stackoverflow.com/questions/3177241/best-way-to-concatenate-two-vectors –
См. Это [ответ Ben Voigt] (https://stackoverflow.com/questions/ 17636690/хороший-путь к Append-а-вектор-к-себе). –
@MohitBhasi - это дубликат другого вопроса, на который я ссылался. Возможно, я должен изменить заголовок на «Как объединить MANY std :: vectors»;) – user463035818