以下のコードで、なぜit経由だとinsertできず、s2経由だとinsertできるのか分かりません。
なぜコンパイルに通らないか分かる方、教えてください。
it->insertの行を有効にしてコンパイルしようとすると以下の様なコンパイルエラーとなります(clang++, g++ともにエラーになります)。
► スポイラーを表示
コード:
main.cpp:10:9: error: no matching member function for call to 'insert'
it->insert(s2.begin(), s2.end()); // ERROR
~~~~^~~~~~
/usr/include/c++/4.2.1/bits/stl_set.h:344:9: note: candidate function [with _InputIterator =
std::_Rb_tree_const_iterator<int>] not viable: no known conversion from 'pointer' (aka 'const std::set<int,
std::less<int>, std::allocator<int>> *') to 'std::set<int, std::less<int>, std::allocator<int>>' for object
argument;
insert(_InputIterator __first, _InputIterator __last)
^
/usr/include/c++/4.2.1/bits/stl_set.h:331:7: note: candidate function not viable: no known conversion from 'pointer'
(aka 'const std::set<int, std::less<int>, std::allocator<int>> *') to 'std::set<int, std::less<int>,
std::allocator<int>>' for object argument;
insert(iterator __position, const value_type& __x)
^
/usr/include/c++/4.2.1/bits/stl_set.h:304:7: note: candidate function not viable: requires 1 argument, but 2 were
provided
insert(const value_type& __x)
^
1 error generated.
コード:
#include <set>
using namespace std;
void f()
{
set<set<int>> s1;
set<int> s2;
set<set<int>>::iterator it;
//it->insert(s2.begin(), s2.end()); // ERROR
s2.insert(s2.begin(), s2.end()); // OK
}