我有 2 个这样的 vector :
std::vector <svm_node *> vettProbX;
std::vector <double> vettProbY;
svm_node
是一个结构。
我需要从这些 vector 中只取一个元素,每 50 个元素。例如,如果 vettProbY
的维度是 1000,我将只获得 20 个值 (0,50,100,150,200..)。
我怎样才能为他们两个实现这个算法?
我认为对于 vettProbY
我可以实现这样的东西:
std:: vector <double> NewVettProbY
for(int i=0; i<vettProbY.size(); i++)
{
if((i % 50)=0)
NewVettProbY.push_back(vettProbY[i]);
}
但我不知道如何为 vector vettProbX
实现同样的事情。
感谢您的帮助。
首先要注意的是您将原始指针存储在vettProbX
中:
std::vector<svm_node *> vettProbX;
你确定吗?如果它们是 观察 指针,STL 容器内的原始指针就没问题;但是拥有原始指针是不好的并且是泄漏的来源!
另一种选择是使用带有智能指针的STL容器,如shared_ptr
,例如:
std::vector<std::shared_ptr<svm_node>> vettProbX;
(对于 unique 所有权,std::unique_ptr
很好,而且比 shared_ptr
更高效、更轻量。)
无论如何,你可能想使用这样的代码:
std::vector<double> newVettProbY;
for (size_t i = 0; i < vettProbY.size(); i += 50 /* step */)
{
newVettProbY.push_back(vettProbY[i]);
}
// Assuming:
// std::vector<std::shared_ptr<svm_node>> vettProbX;
std::vector<std::shared_ptr<svm_node>> newVettProbX;
for (size_t i = 0; i < vettProbX.size(); i += 50 /* step */)
{
newVettProbX.push_back(vettProbX[i]);
}