最方便的方式来表示向量引用的向量

时间:2016-10-16 10:34:18

标签: c++ reference stdvector

我有以下代码:

#include <iostream>
#include <vector>


using namespace std;

using float_vec = vector<float>;

float foo( vector<float_vec*> vec )
{
  // ...

  return (*vec[0])[0] = 1;
}


int main()
{
  std::vector<float> i_1(1,0);
  // ...
  std::vector<float> i_n(1,0);

  std::cout << i_1[ 0 ] << std::endl;

  foo( {&i_1, /* ..., */ &i_n} );

  std::cout << i_1[ 0 ] << std::endl;

  return 0;
}

正如您在上面所看到的,我将一个浮点向量向量传递给函数foo,其中foo对其输入有副作用。为此,我使用指针向量;不幸的是,这使得代码有点难以理解 - &gt; &#34;(* VEC [0])[0]&#34;和&#34;&amp; i_1&#34;,...,&#34;&amp; i_n&#34;。有没有更优雅的方式来表示C ++中的指针向量?

我尝试使用std :: refrence_wrappers如下

#include <iostream>
#include <vector>


using namespace std;

using float_vec = std::reference_wrapper< vector<float> >;

float foo( vector<float_vec> vec )
{
  // ...

  return vec[0].get()[0] = 1;
}


int main()
{
  std::vector<float> i_1(1,0);
  // ...
  std::vector<float> i_n(1,0);

  std::cout << i_1[ 0 ] << std::endl;

  foo( {i_1, /* ..., */ i_n} );

  std::cout << i_1[ 0 ] << std::endl;

  return 0;
}

然而,在这里,&#34; get()&#34;苦恼。

是否有人建议如何使用指针/参考文件&#34;应该用C ++表示吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

如果要实现的只是修改传递给函数的向量,则不需要指针。只需通过引用传递矢量。

#include <iostream>
#include <vector>


using namespace std;

using float_vec = vector<float>;

float foo( vector<float_vec>& vec )
{
  // anything you do to vec here will change the vector you pass to the function

  return 1;
}