2012-09-28 23 views
4
int main() 
{ 
    vector<int> myvector (3,100); 

    int myarray [] = { 501,502,503 }; 
    myvector.insert (myvector.begin(), myarray, myarray+3); 

    return 0; 
} 

这有效。如何将结构添加到矢量的前端?

这不:

typedef struct 
{ 
    float latitude; 
    float longitude; 
} coordinate; 

int main() 
{ 
    std :: vector <coordinate> previousPoints; 

    coordinate start; 
    start.latitude = 22.3; 
    start.longitude = 33.4; 
    previousPoints.insert (previousPoints.begin(), start, 1); 

    return 0; 
} 

错误:

[email protected]:~> g++ y.cpp 
y.cpp: In function ‘int main()’: 
y.cpp:18:58: error: no matching function for call to ‘std::vector<coordinate>::insert(std::vector<coordinate>::iterator, coordinate&, int)’ 
/usr/include/c++/4.5/bits/vector.tcc:106:5: note: candidates are: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::iterator, const value_type&) [with _Tp = coordinate, _Alloc = std::allocator<coordinate>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<coordinate*, std::vector<coordinate> >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = coordinate*, value_type = coordinate] 
/usr/include/c++/4.5/bits/stl_vector.h:858:7: note:     void std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::iterator, std::vector::size_type, const value_type&) [with _Tp = coordinate, _Alloc = std::allocator<coordinate>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<coordinate*, std::vector<coordinate> >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = coordinate*, std::vector::size_type = long unsigned int, value_type = coordinate] 
[email protected]:~> 

什么在谈论的错误呢?这两个例子有什么不同?

+1

不要觉得愚蠢有关此错误:C++编译器错误信息是基本没用......他们的意思是“这里有一个错误,但I'not要告诉你它是什么...... neener neener”。他们非常糟糕,甚至有些公司只靠破译错误信息谋生。 – 6502

+1

@ 6502第一行很有说服力:它说代码尝试使用的构造函数不存在。 – juanchopanza

+1

@ juanchopanza:当你忘记另一个文件中的常量时,真正的乐趣开始,并且错误消息直接从标准包含文件的内容中开始non screen废话的屏幕截图,其中名称的下划线比常规字符更多。在这个特定情况下,错误是可以的(对于C++设置)。但一个很好的错误将会是“丢失并在第二个参数之前”... – 6502

回答

7

没有3个参数std::vector::insert方法取一个值作为第二个参数。如果你想在前面插入,你可以尝试

previousPoints.insert(previousPoints.begin(), start); 

顺便说一句,如果你将要经常进行这种操作,大载体,你可能要考虑使用std::deque代替,并用它的方法是push_front,具有复杂的时间复杂度。

+0

它在那里,看到这个:http://www.cplusplus.com/reference/stl/vector/insert/ –

+0

顺便说一句,我试过你的方法,它也可以。谢谢。 –

+0

@AnishaKaul nope。有'site_type'或'InputIterator'作为三个参数变体的第二个参数。 – juanchopanza