簡體   English   中英

沒有匹配的函數來調用&#39;std :: vector <int> ::使用宏時插入

[英]No matching function for call to 'std::vector<int>::insert' when using a macro

我編寫了對向量執行一些操作的代碼,其中定義了一個宏:

#define all(c) ((c).begin(),(c).end())

...並使用v2.insert(1, all(v1))將該宏用於矢量插入。

這意味着,我要插入的矢量的所有元素v1在載體第二位置v2 但是,在insert函數調用的行上出現以下錯誤:

沒有匹配的函數來調用'std :: vector :: insert ...

代碼如下:

#include<iostream>
#include<stdio.h>
#include<vector>
#include<stdlib.h>

#define all(c) ((c).begin(),(c).end())
using namespace std;
int main()
{
    int data[]={1,2,3,4,5,6,7,8};
    vector<int> v1(data+1,data+5);
    vector<int> v2(2,1);

    v2.insert(1,all(v1));

    printf("\n Before the for loop");
    for(vector<int> v2::iterator it=v2.begin();it!=v2.end();it++)
    {
        printf("\t %d \t ",*it++);
    }
    return 0;
}

由於有了這個宏,您有了v2.insert(1,((v1).begin(),(v1).end()))和內部((v1).begin(),(v1).end())使用內置的逗號運算符代替參數分隔符。 這意味着您真正在做什么是v2.insert(1,((v1).end()))

我建議您不要使用宏來“縮短”這樣的事情。 除了產生像您一樣的問題外,它還會使代碼更難以閱讀,理解和維護。

沒有匹配的 function 調用 'std::vector <std.. '< div><div id="text_translate"><p> 我正在解決的問題是:我必須采用<strong>T</strong>測試用例。 For each test case I have to take string as an input, then I need to arrange the input string as: <em>string at even position {double space} string at odd position</em> (example: <em>input</em> - StackOverflow, <em>output</em> - <strong>Sakvrlw</strong> <strong>tcOefo</strong> ). 我編寫了以下代碼,其中我為所有測試用例獲取輸入並將其存儲在向量中。 然后我將 vector 的元素分配給另一個聲明的 string s。</p><pre> #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespace std; int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int T,i; cout &lt;&lt; "Enter no. of test cases: "; cin &gt;&gt; T; vector&lt;string&gt; v; vector&lt;string&gt; odd; vector&lt;string&gt; even; string str; for(int i=0; i&lt;T; i++){ cin &gt;&gt; str; v.push_back(str); } string s; for(i=0; i&lt;v.size(); i++){ s = v.at(i); for(i=0; i&lt;s.size(); i++){ if(i==0){ even.push_back(s[i]); //*This is where I am getting error*. }else if(i==1){ odd.push_back(s[i]); }else{ if(i%2==0){ even.push_back(s[i]); }else{ odd.push_back(s[i]); } } } for(i=0; i&lt;even.size(); i++){ cout &lt;&lt; even.at(i); } cout &lt;&lt; " "; for(i=0; i&lt;odd.size(); i++){ cout &lt;&lt; odd.at(i); } cout &lt;&lt; endl; even.clear(); odd.clear(); s.clear(); } return 0; }</pre><p> 在編譯上面的代碼時,我得到"no matching error for call std::vector..." 。 <strong><em>我到底做錯了什么?</em></strong></p></div></std..>

[英]no matching function for call to 'std::vector<std.. '

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 沒有匹配的函數來調用&#39;merge(std :: vector <int> &,std :: vector <int> &) 錯誤:沒有匹配的 function 調用 'std::vector::erase(int)' C ++錯誤:沒有匹配的函數可以調用&#39;std :: vector <int> ::交換(標准::矢量 <int> )” 沒有匹配的 function 調用 'std::vector <std::vector<int> &gt;::push_back(int)' </std::vector<int> C ++模板錯誤:調用std :: vector沒有匹配功能 <int, std::allocator<int> &gt; C++ - 在 foreach 中復制向量給出“沒有匹配的函數來調用 std::vector<int> ::push_back(std::vector)<int> &amp;)” 沒有匹配的 function 調用 'std::vector <std.. '< div><div id="text_translate"><p> 我正在解決的問題是:我必須采用<strong>T</strong>測試用例。 For each test case I have to take string as an input, then I need to arrange the input string as: <em>string at even position {double space} string at odd position</em> (example: <em>input</em> - StackOverflow, <em>output</em> - <strong>Sakvrlw</strong> <strong>tcOefo</strong> ). 我編寫了以下代碼,其中我為所有測試用例獲取輸入並將其存儲在向量中。 然后我將 vector 的元素分配給另一個聲明的 string s。</p><pre> #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespace std; int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ int T,i; cout &lt;&lt; "Enter no. of test cases: "; cin &gt;&gt; T; vector&lt;string&gt; v; vector&lt;string&gt; odd; vector&lt;string&gt; even; string str; for(int i=0; i&lt;T; i++){ cin &gt;&gt; str; v.push_back(str); } string s; for(i=0; i&lt;v.size(); i++){ s = v.at(i); for(i=0; i&lt;s.size(); i++){ if(i==0){ even.push_back(s[i]); //*This is where I am getting error*. }else if(i==1){ odd.push_back(s[i]); }else{ if(i%2==0){ even.push_back(s[i]); }else{ odd.push_back(s[i]); } } } for(i=0; i&lt;even.size(); i++){ cout &lt;&lt; even.at(i); } cout &lt;&lt; " "; for(i=0; i&lt;odd.size(); i++){ cout &lt;&lt; odd.at(i); } cout &lt;&lt; endl; even.clear(); odd.clear(); s.clear(); } return 0; }</pre><p> 在編譯上面的代碼時,我得到"no matching error for call std::vector..." 。 <strong><em>我到底做錯了什么?</em></strong></p></div></std..> 沒有匹配的函數調用&#39;std::map <std::pair<int, int> , int&gt;::insert(std::pair<int, int> , int)&#39; vis.insert(make_pair(1,2),3); 沒有用於調用 &#39;std::set 的匹配函數<unsigned int> ::插入(標准::大小t&) 插入std :: map的簡短函數 <int, std::vector<int> &gt;
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM