“不匹配运算符>>”但我不明白为啥。请给我解释一下好吗?

Posted

技术标签:

【中文标题】“不匹配运算符>>”但我不明白为啥。请给我解释一下好吗?【英文标题】:"No match for operator>>" but I don't understand why. Could you explain me, please?“不匹配运算符>>”但我不明白为什么。请给我解释一下好吗? 【发布时间】:2020-10-15 19:37:14 【问题描述】:

我有以下代码:

#include <iostream>
#include <vector>

using namespace std;

vector<int> Reversed(const vector<int>& v)
    
    //vector<int> v;  //[Error] declaration of 'std::vector<int> v' shadows a parameter
    int z; vector<int> copy; vector<int> working;
    working = v;
    z = working.size();
    int i;
    for (i = 0; i<=z; i++)
        working[i] = working[z];
        copy.push_back(working[i]);
    
    return copy;


int main() 
    
    vector<int> v;
    cin >> v;  /*[Error] no match for 'operator>>' (operand types are 'std::istream' 
                aka 'std::basic_istream<char>' and 'std::vector<int>')*/
    cout << Reversed(v);
    return 0;

请向我解释为什么我在第 18 行收到此错误:

运算符不匹配>>`

P.s.:const &amp; i 是前置任务,我无法更改。我只需要这个向量的颠倒副本。

【问题讨论】:

谢天谢地,标准库不包含读取整个向量的内置方式。另请参阅此问题:***.com/questions/26589317/… 问自己这个问题。你认为这段代码cin &gt;&gt; v; 怎么知道向量有多大?希望这表明您无法以这种方式读取向量。如果你需要读取一个向量然后写一个循环,然后你可以决定做多大的向量。 您到底想做什么?我可以在您的函数中看到多个超出范围的索引错误... 错误消息告诉您vector 不包含该功能。有很多方法可以将一系列 int 读入向量,但这不是其中之一。值得注意的是,working[i] = working[z]; 看起来像是越界访问向量。 不要预先声明你的变量。在初始化它们时声明它们。 【参考方案1】:

您似乎在要求用户输入数字列表。 std::cin(或者只是cin,因为你有use namespace std;)不知道如何接收整数列表并将其转换为vector&lt;int&gt;

如果您想从用户输入接收矢量,我建议您向用户询问数字列表,例如:

// replace VECTOR_LENGTH
for (int i = 0; i < VECTOR_LENGTH; i++) 
  int num;
  cin >> num;
  v.push_back(num);

【讨论】:

非常感谢!我是新手,所以我不认为 不通过 "cin >>" 取值 查看代码中的错误消息,它并不能很好地表明您所犯的错误。这与 cin &gt;&gt;cout &lt;&lt; 是如何通过重载移位运算符实现的有关,这不一定对新手有帮助!【参考方案2】:

当您这样做cin &gt;&gt; v; 时,您正试图一口气读取整个向量。您可能希望一次读取一个元素,例如:

#include <iostream>
#include <vector>

using namespace std;

int main(void)

   // read five integers from stdin
  const int n = 5;
  vector<int> v(n);
  for(int i = 0; i < n; ++i)
    cin >> v[i];
  for(int i = 0; i < n; ++i)
    cout << v[i] << "\n";
  return 0;

输出:

0
1
2
3
4

或者使用std::vector::push_back @ajm 答案。

【讨论】:

我完全是新手。感谢您的提示,我会研究一下并尝试! @RamRai 请检查我更新的答案,大部分都丢失了。

以上是关于“不匹配运算符>>”但我不明白为啥。请给我解释一下好吗?的主要内容,如果未能解决你的问题,请参考以下文章

我不明白为啥会这样编译

我不明白为啥会出现语法错误

我不明白为啥 CSS 转换在 keydown 上不起作用 [重复]

我的代码中“不匹配'运算符>>'”是啥意思?

错误:list.remove(x):x 不在列表中,我不明白为啥

我不明白为啥我的手机没有出现?