如何 cin 到 back_inserter 或 c++ 中的任何插入器?
How to cin to a back_inserter or any inserter in c++?
所以我在考虑简化这个片段
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> A;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
A.push_back(tmp);
}
}
并且因为我阅读了有关插入器的内容,并且 back_inserters 最近我想到了立即使用它们,这就是我想到的
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> A;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) cin >> *back_inserter(A);
}
但出于某种原因,编译器吐出一条巨大的错误消息,我无法将其放在这里,所以这里只是第一句话,因为我认为它是最相关的。
error: no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'std::back_insert_iterator<std::vector<int> >')
感谢您的帮助!
注意:在任何人评论全局变量的使用和使用命名空间行之前,这段代码是
仅用于竞争性节目。
在这种情况下,您只是从输入流中读取 space 分隔值直到结束,您可以使用 std::copy
从流中获取值。那看起来像
std::copy(std::istream_iterator<int>(cin),
std::istream_iterator<int>(),
std::back_inserter(vector_name));
您可以读入一个临时变量。
for (int k, i = 0; i < n; i++) cin >> k, back_inserter(A) = k;
# or nicer:
for (int i = 0; i < n; i++) {
int k;
cin >> k;
back_inserter(A) = k;
}
您可以提供缺少的重载并读入其中的临时变量:
template<typename T>
std::istream& operator>>(std::istream& is, std::back_insert_iterator<std::vector<T>> obj) {
T tmp;
is >> tmp;
obj = tmp;
return is;
}
int main() {
for (int i = 0; i < n; i++) cin >> back_inserter(A);
}
所以我在考虑简化这个片段
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> A;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
A.push_back(tmp);
}
}
并且因为我阅读了有关插入器的内容,并且 back_inserters 最近我想到了立即使用它们,这就是我想到的
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> A;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) cin >> *back_inserter(A);
}
但出于某种原因,编译器吐出一条巨大的错误消息,我无法将其放在这里,所以这里只是第一句话,因为我认为它是最相关的。
error: no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'std::back_insert_iterator<std::vector<int> >')
感谢您的帮助!
注意:在任何人评论全局变量的使用和使用命名空间行之前,这段代码是 仅用于竞争性节目。
在这种情况下,您只是从输入流中读取 space 分隔值直到结束,您可以使用 std::copy
从流中获取值。那看起来像
std::copy(std::istream_iterator<int>(cin),
std::istream_iterator<int>(),
std::back_inserter(vector_name));
您可以读入一个临时变量。
for (int k, i = 0; i < n; i++) cin >> k, back_inserter(A) = k;
# or nicer:
for (int i = 0; i < n; i++) {
int k;
cin >> k;
back_inserter(A) = k;
}
您可以提供缺少的重载并读入其中的临时变量:
template<typename T>
std::istream& operator>>(std::istream& is, std::back_insert_iterator<std::vector<T>> obj) {
T tmp;
is >> tmp;
obj = tmp;
return is;
}
int main() {
for (int i = 0; i < n; i++) cin >> back_inserter(A);
}