【问题标题】:what's the difference between "vector<int>& a " and "vector<int> a"?“vector<int>& a”和“vector<int> a”有什么区别?
【发布时间】:2020-12-27 03:55:27
【问题描述】:

我是 C++ 的初学者。我尝试编写一个程序来一个一个地旋转一个向量

即{1,2,3,4,5} --> {2,3,4,5,1} --> {3,4,5,1,2}

vector<vector<int>> allrot(const vector<int>& a)
{  
   vector<vector<int>> result;
   for (int i = 0; i < a.size(); i ++ ){
      rotate(a.begin(), a.begin() + 1, a.end());
      result.push_back(a);
   }
   return result;
}

这不起作用,我有几个问题。

  1. 为什么我应该使用vector&lt;int&gt;&amp; a 而不是vector&lt;int&gt; a?
  2. 我的代码有什么问题?

感谢您的帮助

【问题讨论】:

  • 我建议你买一本好书/阅读一些关于文档的东西
  • 您收到错误消息,因为您尝试在 const 向量上调用 rotate。您可以通过先添加然后旋转来解决此问题并保留参数const。 result.push_back(a); rotate(result.back().begin(), result.back().begin() + i + 1, result.back().end());
  • @JohnnyMopp 您也可以在那里使用rotate_copy,我认为应该更快?你会:result.emplace_back(std::vector&lt;int&gt;(a.size()); std::rotate_copy(a.begin(), a.begin() + i + 1, a.end(), result.back().begin());

标签: c++ c++11 pointers vector


【解决方案1】:

当您传递vector&lt;int&gt; 时,函数会获取该向量的副本。您可以在函数中使用它做任何您想做的事情,并且您的原始数据不会改变。

当您传递vector&lt;int&gt;&amp; 时,函数会获取引用,这意味着函数中的任何更改都会修改原始数据。

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 2021-11-07
    • 2019-09-06
    • 1970-01-01
    • 2022-08-07
    • 2021-09-16
    • 2020-05-05
    • 2021-05-04
    相关资源
    最近更新 更多