【问题标题】:memset for a given range in an array数组中给定范围的 memset
【发布时间】:2015-01-05 16:20:07
【问题描述】:

我知道我们如何使用 memset 将数组的内容设置为特定值。现在,我对在给定范围内做同样的事情感兴趣。

scanf("%d %d",&a,&b);
//set the content from A[a] to A[b] as '0' without looping

我不想通过 for 循环。请告诉是否有其他有效的方法来实现这一点。

【问题讨论】:

  • 我很确定memset() 的大多数版本都至少包含一个for 循环。但是你尝试过什么吗?也许像memset(A + a, b - a, 0) 这样的东西,但通过适当的检查来确保ab 实际上首先是数组中的有效索引?
  • 嗨!所以你的意思是无论我使用 memset 还是 for 循环,都是一样的?而你所说的,给出了垃圾输出。 ://
  • 除了在 x86 等具有本机循环指令的平台上(由于迭代次数或其他指令集约束的限制,在某些情况下可能无论如何都不会使用),很可能一个正确构造的 @987654327与内联的memset() 调用相比,@loop 将生成几乎相同的指令。但是memset() 对于那些必须在路上审查代码的人来说往往更清楚,编译器/库编写者应该为它提供尽可能接近最佳的代码,所以最好使用memset(),除非你有有充分的理由不这样做。
  • 糟糕,我在原始评论中的参数乱了序,并且假设我们正在讨论字节数组 - 应该是 memset(A + a, 0, (b - a) * sizeof(A[0]))

标签: memset


【解决方案1】:

使用 memset 分配值仅适用于 2 个值:0 和 -1
休息只会给出垃圾值
不过,让我帮助您将 memset 用于范围。
我在下面用一个例子来解释你的查询:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[10]; // Array of 10 elements with val of 0;
    memset(a,0,sizeof(a));
    // Sets all array elements to 0 

    memset(a+2,-1,sizeof(int)*5);
    // Sets value of array elements from 2 to 6 index equals to -1

    for(int i=0;i<10;i++)
       cout<<a[i]<<" ";
       cout<<endl;

       return 0;
}

输出: 0 0 -1 -1 -1 -1 -1 0 0 0

* 在发布之前,我已经检查了各种 IDE 上的代码。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多