C++ STL复制、配对、向量和插入器
我的意见如下:C++ STL复制、配对、向量和插入器,c++,oop,vector,stl,operator-overloading,C++,Oop,Vector,Stl,Operator Overloading,我的意见如下: 1 a 2 b .. 我想用复制函数将它们插入成对向量,如下所示: #include <vector> #include <iterator> #include <algorithm> #include <iostream> int main(void) { std::vector<std::pair<int, char>> v; std::copy(std::istream_iterat
1 a
2 b
..
我想用复制函数将它们插入成对向量,如下所示:
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
int main(void) {
std::vector<std::pair<int, char>> v;
std::copy(std::istream_iterator<std::pair<int, char>>(std::cin), std::istream_iterator<std::pair<int, char>>(), std::back_inserter(v));
for(auto pair: v)
std::cout << pair.first << std::endl;
return 0;
}
#包括
#包括
#包括
#包括
内部主(空){
std::向量v;
std::copy(std::istream_迭代器(std::cin)、std::istream_迭代器()、std::back_插入器(v));
用于(自动配对:v)
std::cout问题不在于std::vector
,而是std::istream\u迭代器
。原因是std::pair
没有定义反序列化运算符
您仍然可以使用std::vector
和std::back\u insert\u迭代器
,但您需要定义自己的输入迭代器。一个读取成对值的迭代器
有些人可能建议您为您的配对定义运算符>
,但这是一种不可靠的技术。这取决于在包含
和
之前定义的运算符。您可以通过代理对象复制它:
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
struct proxy
{
friend auto operator>>(std::istream& is, proxy& prox) -> std::istream&
{
is >> std::get<0>(prox.target);
is >> std::get<1>(prox.target);
return is;
}
operator std::pair<int, char>() const {
return target;
}
std::pair<int, char> target;
};
int main(void) {
std::vector<std::pair<int, char>> v;
std::copy(std::istream_iterator<proxy>(std::cin),
std::istream_iterator<proxy>(),
std::back_inserter(v));
for(auto pair: v)
std::cout << pair.first << std::endl;
return 0;
}
#包括
#包括
#包括
#包括
结构代理
{
friend auto operator>>(std::istream&is、代理和prox)->std::istream&
{
is>>std::get(prox.target);
is>>std::get(prox.target);
回报是;
}
运算符std::pair()常量{
回报目标;
}
std::配对目标;
};
内部主(空){
std::向量v;
std::copy(std::istream_迭代器(std::cin),
std::istream_迭代器(),
标准:背部插入器(v);
用于(自动配对:v)
std::您是否需要为Oh@P0W定义自己的实现,所以迭代器的问题,而不是向量,我明白了!不,我在std
名称空间中做/建议时有点犹豫。有更好的替代方案,可能需要更多的努力。啊,我明白了,+1!您能解释一下您的最后一段吗?@gsamaras-。您的代码我们不能这样做来添加新函数的定义。这是一个很好的答案。如果它表明我对应该重载的内容的印象是错误的(这是迭代器,而不是向量),我会接受它。这样接受的答案会很简洁。