【问题标题】:Inplace array change [duplicate]就地数组更改[重复]
【发布时间】:2018-07-17 01:57:12
【问题描述】:

试图就地调整我的阵列。但似乎它不起作用。在数组上运行函数后,值保持不变。

void filter_scan(std::array<float, 270>& scan){
  for(float val : scan){
    if(val < 0.5 || val > 2)
      val = 0;
  }
}

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    即使您通过引用传递数组,您也可以通过值(复制)访问每个元素。

    for(float val : scan)
    

    将数组的每个元素复制到val 中,您对其进行的任何修改都不会显示在数组中。您需要将val 设为类似

    for(float& val : scan)
    

    【讨论】:

      【解决方案2】:

      您正在按值访问数组条目。为每个条目创建一个本地副本val,然后更改,只是再次被遗忘。要获得“读写”类型的访问权限,您可以按引用扫描数组:

      void filter_scan(std::array<float, 270>& scan){
        for(float& val : scan) { // Notice the "&"!
          if(val < 0.5 || val > 2)
            val = 0;
        }
      }
      

      【讨论】:

        【解决方案3】:

        您需要添加参考:

        void filter_scan(std::array<float, 270>& scan){
          for(float &val : scan){
            if(val < 0.5 || val > 2)
              val = 0;
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-06-10
          • 2014-09-21
          • 2019-07-05
          • 1970-01-01
          • 2014-10-29
          • 1970-01-01
          • 2021-01-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多