我有以下代码:
typedef unsigned long int U64;
std::vector<U64> vectorA;
std::vector<U64> vectorB;
vectorA.insert(vectorA.end(), vectorB.begin(), vectorB.end());
我在最后一行遇到编译错误,找不到方法。
它需要以下签名(来自 stl_vector.h 的代码):
template<typename _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
iterator
insert(const_iterator __position, _InputIterator __first,
_InputIterator __last)
如何获取vector类实例的_InputIterator / _RequireInputIter实例? 我可以用不同的方法做同样的事吗?
我正在使用gcc:
gcc版本7.0.1 20170407(实验性)[trunk revision 246759] (Ubuntu 7-20170407-0ubuntu2)
和Ubuntu:
NAME =“Ubuntu”VERSION =“17.04(Zesty Zapus)”
编辑:
我收到编译错误:
Invalid arguments ' Candidates are:
__gnu_cxx::__normal_iterator<int *,std::vector<int,std::allocator<int>>> insert(__gnu_cxx::__normal_iterator<const int
*,std::vector<int,std::allocator<int>>>, const int &)
__gnu_cxx::__normal_iterator<int *,std::vector<int,std::allocator<int>>> insert(__gnu_cxx::__normal_iterator<const int
*,std::vector<int,std::allocator<int>>>, int &&)
__gnu_cxx::__normal_iterator<int *,std::vector<int,std::allocator<int>>> insert(__gnu_cxx::__normal_iterator<const int
*,std::vector<int,std::allocator<int>>>, std::initializer_list<int>)
__gnu_cxx::__normal_iterator<int *,std::vector<int,std::allocator<int>>> insert
答案 0 :(得分:3)
代码编译并正常工作。使用https://wandbox.org/
进行测试#include <vector>
#include <iostream>
typedef unsigned long int U64;
int main()
{
std::vector<U64> vectorA = { 3, 4};
std::vector<U64> vectorB = { 5, 7};
vectorA.insert(vectorA.end(), vectorB.begin(), vectorB.end());
for (const auto& i: vectorA)
std::cout << i << ' ';
}
有些事你没有告诉我们。
请注意,此处使用的是NOT STL。 STL是一个创建于90年代的遗留库。我们现在使用的是基于STL和扩展程度的标准C ++库。由于历史原因,STL仍然存在。但STL不符合C ++标准。包含路径或工具链有问题。您可能实际上尝试使用vanilla STL标头进行编译,或者某些标头与boost标头混合在一起。