I am trying to understand more the STL containers; Now I've read and used std::back_insert_iterator
so I want to create a class like it for educational purpose only:
template <typename container>
class BackInsertIter {
public:
BackInsertIter() = delete;
explicit BackInsertIter(container&);
BackInsertIter& operator*();
BackInsertIter& operator=( typename container::const_reference);
container* container_;
};
template <typename container>
BackInsertIter<container>::BackInsertIter(container& cont) :
container_(&cont){
}
template <typename container>
BackInsertIter<container>& BackInsertIter<container>::operator*() {
return *this;
}
template <typename container>
BackInsertIter<container>& BackInsertIter<container>::operator=(typename container::const_reference val) {
container_->.push_back(val);
return *this;
}
template <typename container>
BackInsertIter<container> Back_Insert(container& cont) {
return BackInsertIter<container>(cont);
}
int main() {
std::vector<int> vi;
BackInsertIter< std::vector<int>> bivi(vi);
*bivi = 57;
*bivi = 10;
*bivi = 24;
*bivi = 81;
for (auto i : vi)
std::cout << i << ", ";
std::cout << std::endl;
std::list<std::string> lstr;
BackInsertIter<std::list<std::string>> bilstr(lstr);
*bilstr = "Hello to";
*bilstr = "C++";
*bilstr = "World!";
for (const auto& str : lstr)
std::cout << str << " ";
std::cout << std::endl;
vi.clear();
auto it1 = Back_Insert(vi);
*it1 = 1;
*it1 = 2;
*it1 = 3;
*it1 = 4;
*it1 = 5;
for (auto i : vi)
std::cout << i << ", ";
std::cout << std::endl;
auto it2 = Back_Insert(lstr);
*it2 = "Ahmed";
*it2 = "Programmer";
for (const auto& str : lstr)
std::cout << str << " ";
std::cout << std::endl;
vi.clear();
std::cout << "enter integer values for vector folloed by endline character (ctrl+z): " << std::endl;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
Back_Insert(vi));
for (const auto& i : vi)
std::cout << i << " ";
std::cout << std::endl;
}
The code works fine until I try to pass my Back_Insert_Iterator
to std::copy
where I get this error:
"Severity Code Description Project File Line Error C4996 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' ConsoleApplication1 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2230 "