“不匹配运算符>>”但我不明白为啥。请给我解释一下好吗?
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 & i
是前置任务,我无法更改。我只需要这个向量的颠倒副本。
【问题讨论】:
谢天谢地,标准库不包含读取整个向量的内置方式。另请参阅此问题:***.com/questions/26589317/… 问自己这个问题。你认为这段代码cin >> v;
怎么知道向量有多大?希望这表明您无法以这种方式读取向量。如果你需要读取一个向量然后写一个循环,然后你可以决定做多大的向量。
您到底想做什么?我可以在您的函数中看到多个超出范围的索引错误...
错误消息告诉您vector
不包含该功能。有很多方法可以将一系列 int 读入向量,但这不是其中之一。值得注意的是,working[i] = working[z];
看起来像是越界访问向量。
不要预先声明你的变量。在初始化它们时声明它们。
【参考方案1】:
您似乎在要求用户输入数字列表。 std::cin
(或者只是cin
,因为你有use namespace std;
)不知道如何接收整数列表并将其转换为vector<int>
。
如果您想从用户输入接收矢量,我建议您向用户询问数字列表,例如:
// replace VECTOR_LENGTH
for (int i = 0; i < VECTOR_LENGTH; i++)
int num;
cin >> num;
v.push_back(num);
【讨论】:
非常感谢!我是新手,所以我不认为cin >>
和 cout <<
是如何通过重载移位运算符实现的有关,这不一定对新手有帮助!【参考方案2】:
当您这样做cin >> 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 上不起作用 [重复]