Каково решение для ошибки в векторе в C ?

#c #c 11 #vector

#c #c 11 #вектор #c 11

Вопрос:

 /*
// Sample code to perform I/O:

#include <iostream>

using namespace std;

int main() {
    int num;
    cin >> num;                                     // Reading input from STDIN
    cout << "Input number is " << num << endl;      // Writing output to STDOUT
}

// Warning: Printing unwanted or ill-formatted data to output will cause the test cases to fail
*/

// Write your code here
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>  
using namespace std;
typedef long long int ll;
vector<ll> v;
void make(ll num)
{
    if(num>10000000000)
        return ;
    if(num!=0)
        v.insert(num);
     make(num*10 4);
     make(num*10 7);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll num=0;
    make(num);
    ll n,ans=0;
    cin>>n;
    for(auto i:v)
    {
        for(auto j:v)
        {
            if(i<=namp;amp;j<=namp;amp;j>=i)
            {
                if(__gcd(i,j)==1)
                    ans  ;
            }
        }
    }
    cout<<ans<<endl;

    return 0;
}
  

Ошибка:

 In function 'void make(ll)':
30:21: error: no matching function for call to 'std::vector<long long int>::insert(llamp;)'


69:0,
20:
114:5: note: candidate: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, const value_typeamp;) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = long long int*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const long long int*, std::vector<long long int> >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const long long int*; std::vector<_Tp, _Alloc>::value_type = long long int]
:

114:5: note:   candidate expects 2 arguments, 1 provided
64:0,
20:
1042:7: note: candidate: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, std::vector<_Tp, _Alloc>::value_typeamp;amp;) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = long long int*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const long long int*, std::vector<long long int> >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const long long int*; std::vector<_Tp, _Alloc>::value_type = long long int]


1042:7: note:   candidate expects 2 arguments, 1 provided
1059:7: note: candidate: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, std::initializer_list<_Tp>) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = long long int*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const long long int*, std::vector<long long int> >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const long long int*]


1059:7: note:   candidate expects 2 arguments, 1 provided
1084:7: note: candidate: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, std::vector<_Tp, _Alloc>::size_type, const value_typeamp;) [with _Tp = long long int; _Alloc = std::allocator<long long int>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = long long int*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const long long int*, std::vector<long long int> >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const long long int*; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = long long int]


1084:7: note:   candidate expects 3 arguments, 1 provided
1128:2: note: candidate: template<class _InputIterator, class> std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, _InputIterator, _InputIterator) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _Tp = long long int; _Alloc = std::allocator<long long int>]


1128:2: note:   template argument deduction/substitution failed:
30:21: note:   candidate expects 3 arguments, 1 provided<br>
  

Как решить проблему

Комментарии:

1. функция iterator insert( iterator pos, const Tamp; value ); принимает итератор и значение

2. В векторе нет функции, вызываемой insert. Что такое __gcd? Это пользовательская функция, созданная вами?

3. Взгляните на документацию для std::vector::insert .

4. Комментарий @Sumeet, G.M. содержит ссылку, которая доказывает, что вы неправы.

5. typedef long long int ll; — Я слишком часто вижу этот сумасшедший макрос. Почему бы просто не использовать int64_t вместо этого? Это более точно описывает тот тип целого числа, который вы хотите использовать, и не является чем-то похожим на число 11 .

Ответ №1:

В функции make() попробуйте использовать v.push_back(num) вместо v.insert(num) , это должно сработать.

Ответ №2:

У вас отсутствует первый параметр в вашем vector::insert , позиция, после которой должен быть размещен новый элемент. Если вы не хотите использовать vector::push_back , как было предложено в предыдущем ответе, вот MWE:

 #include<iostream>
#include<string>
#include<vector>
#include <algorithm>

using namespace std;

typedef long long int ll;
vector<ll> v;

void make(ll num)
{
    if(num>10000000000)
        return;
    if(num!=0)
        v.insert(v.begin(),num);   // iterator to insert position added
    make(num*10 4);
    make(num*10 7);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll num=0;
    make(num);
    ll n,ans=0;
    cout << "Input number: " << endl;
    cin>>n;
    for(auto i:v)
    {
        for(auto j:v)
        {
            if(i<=namp;amp;j<=namp;amp;j>=i)
            {
                if(__gcd(i,j)==1)
                    ans  ;
            }
        }
    }

    cout<< "answer = " << ans <<endl;

return 0;
}
  

Для чего это? Генератор случайных чисел?

Комментарии:

1. найдите взаимно простое число, где два числа состоят только из ‘4’ и ‘7’