c++ - 从 vector 中取一些值

标签 c++ vector

<分区>

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

关于c++ - 从 vector 中取一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045148/

相关文章:

c++ - 在 Vector 中查找值的索引,最接近输入

c# - switch 语句中的奇变量范围

c++ - 在 Linux/Ubuntu 中编译 openCV 应用程序时如何解决 undefined reference cv :. ...

c++ - 在运行时找不到链接库 (c++)

c++ - Waitpid 用于执行不可执行脚本的子进程

c++ - 在将大小较大的 vector move 到容量较小的 vector 之前,是否可以通过使用 reserve() 来提高代码性能?

C++输出流运算符<<()中的字符何时加宽?

objective-c - 动态分配数组( vector 实现的动态大小)

c# - 包装包含 vector 的模板类时如何让 SWIG 应用模板?

c++ - C++ 类的问题