- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的程序中使用 copy_if。我想将一个数组的值每 3 个元素复制到另一个数组中。
基本上,我写了这样一个程序:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
int16_t *array;
int16_t *new_array;
array = new int16_t[10]();
new_array = new int16_t[4]();
array[0] = 9;
array[1] = 1;
array[2] = 50;
array[3] = 30;
array[4] = 3;
array[5] = 24;
array[6] = 66;
array[7] = 73;
array[8] = 108;
array[9] = 10;
copy_if(array, array+9, new_array, [&] (const int& i) -> bool
{ size_t index = i -array[0]; return index % 3 == 0; });
for (int jj = 0; jj < 4; jj++) {
cout << "new_array[" << jj << "] = " << new_array[jj] << endl;
}
}
最终结果应该是这样的
new_array[0] = 9
new_array[1] = 30
new_array[2] = 66
new_array[3] = 10
但我得到:
new_array[0] = 9
new_array[1] = 30
new_array[2] = 24
new_array[3] = 66
我多次看到 copy_if 与 vector 一起使用,但可能因为我使用的是指针,所以我遗漏了一些东西。
最佳答案
i
是元素,而不是指向它的指针。您的谓词是错误的,因为它依赖于数组元素的值,而不是它们的位置。应该是:
size_t index = &i - &array[0]; return index % 3 == 0;
现在它用指针算法计算位置。请记住,这样的谓词只能用于连续存储:c 数组、std::array
或 std::vector
。
关于c++ - C++ 中的 copy_if ……有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260640/
copy_if() 算法可以从源序列复制使谓词返回 true 的元素,所以可以把它看作一个过滤器。前两个参数定义源序列的输入迭代器,第三个参数是指向目的序列的第一个位置的输出迭代器,第 4 个参数是一
为什么 copy_if 比 copy 慢 我目前正在研究我的 OpenGL 图形引擎。我试图找出将大量对象传递给 GPU 以进行实例化绘制的最佳方法。对我来说最大的问题是有些对象可能会死,所以我创建了
我是 C++ 新手,正在尝试使用 copy_if 函数: set people; // contains people objects set copyedPeople; string name =
如果我知道如何提取匹配类型,是否有一种现代方式来表达有条件地从不同类型的源容器复制到目标容器的意图? 将问题作为代码示例提出更容易: #include #include struct Foo {}
我有一些类的以下方法,它还定义了 isAllowed 方法: auto filter(const auto& in) { auto ret = decltype(in) {}; for
此代码尝试在多态指针 vector 上使用 copy_if(): #include #include #include using namespace std; class AbstractBa
尝试执行以下操作时,我在 thrust 模板的实例化中收到编译时错误: thrust::copy_if(deviceEntries.begin(), deviceEntries.end(), host
我想检查 std::copy_if 的返回值是否有效。像这样 auto it=std::copy_if(s.begin(),s.end(),d.begin(),[&](...){...}); if([
我有一个 string 数组,我想将其复制到 string 的 vector only if 一个特定的 string 的长度等于一个已知值。 function(int len){ string li
在我看来,std::copy_if 对于过滤容器非常有用: std::vector vec { 1, 2, 3, 4 }; auto itEnd = std::copy_if(vec.begin(),
我正在使用 Visual Studio 2010,我正在尝试使用 std::copy_if,我想复制所有满足谓词的值。例如: struct comp { bool operator()(con
这是代码的一部分,我遇到了麻烦 #include #include #include #include #include #include #include #include #include #in
我正在尝试在我的程序中使用 copy_if。我想将一个数组的值每 3 个元素复制到另一个数组中。 基本上,我写了这样一个程序: #include #include #include usin
澄清一下,这就是收集位的意思:(在这个问题的上下文中) size_t gather_bits(size_t source, size_t mask) { size_t result = 0,
我正在尝试使用 copy_if 复制 map (我想将 _citymap 复制到 _the_cities)。这是我的代码: std::map > _citymap; copy_if(_citymap.
完全公开,这可能是一个锤子和钉子的情况,在不需要的时候尝试使用 STL 算法。我在我正在使用的一些 C++14 代码中看到了一个重新出现的模式。我们有一个迭代的容器,如果当前元素符合某些条件,那么我们
假设我们有以下情况: struct A { int i; }; struct B { A a; int other_things; }; bool predicate( con
例如的非迭代器版本all_of 可以写成: template bool all_of(Container s, UnaryPredicate f) { return all_of(s.begin
出现以下错误: RuntimeError: copy_if failed to synchronize: device-side assert triggered 尝试执行时: 如果 torch.no
在 C++ 中没有 std::copy_if 算法有什么具体原因吗?我知道我可以使用 std::remove_copy_if 来实现所需的行为。我认为它是在 C++0x 中出现的,但是一个简单的 co
我是一名优秀的程序员,十分优秀!