0

我正在尝试生成 int 或 double 类型的随机数,然后将它们插入到一种容器向量中,按排序顺序列出,但问题是插入不起作用,我不知道为什么,所以可以你帮帮我好吗?

#include <iostream>
#include <iterator>
#include <random>
#include <vector>
#include<list>
#include<deque>
#include <algorithm>
#include <chrono>

using namespace std;

int random_gen(){
    default_random_engine re { std::random_device()() };
    uniform_int_distribution<int> dist;
    auto r= bind(dist,re);
    int x =r();
    return x;
}



template<typename SequenceContainer>
void build_cont(const SequenceContainer& seq, int n)
{
    for(int i=0; i!=n; ++i) {
        int gen = random_gen();
        //std::iterator<T> it=lower_bound(begin(seq), end(seq), gen);
        typename SequenceContainer::iterator it;
        it=find_if(seq.begin(), seq.end(), [it](){ return *it<gen;});
        seq.insert(it, gen);
    }
    for(auto i:seq)
        cout<<i<<endl;
}
int main() {
    int n=10;
    vector<int> v;
    list<int>ls;
    deque<int> deq;
    build_cont(v, n);
    build_cont(ls, n);
    build_cont(deq, n);

    return 0;
}

我现在遇到的错误是链接器错误,所以我不知道出了什么问题??

4

1 回答 1

4

有两个问题:

  1. 您不能对 SequenceContainer 进行 const 引用,然后尝试获取非常量迭代器或将项目插入到该 const 引用中。删除常量。

  2. 您需要在 lambda 捕获子句中包含“gen”,并且它必须将值作为参数:

    typename SequenceContainer::iterator it = find_if(
        seq.begin(),
        seq.end(),
        [gen](const int& val) { return gen < val; }
    );
    
于 2013-02-26T05:07:56.107 回答