对元素进行排序,同时将它们插入到不起作用的向量中
sorting elements while inserting them into vector not working
我正在尝试用随机生成的数字填充向量,但问题是,当我运行它时,排序后只得到2个数字。
00000171717
这是我的代码,你能告诉我做错了什么吗
#include <iostream>
#include <random>
#include <functional>
using namespace std;
using namespace std::chrono;
class Rand_int {
public:
Rand_int(int low, int high) :dist{low,high} {
for (int i = 0; i < 100; i++)
cout << "Generated: " << dist(re) << endl;
num = dist(re); }
int operator()() { return dist(re);}
int getNum() const
{
return num;
}
bool operator()(int x) const
{
return (num <= x);
}
private:
default_random_engine re;
uniform_int_distribution<> dist;
int num;
};
int main()
{
int n=10;
vector<int> v(n);
Rand_int rnd {0,20}; // make a uniform random number generator
for (int i=0; i<n; i++)
{
vector<int>::iterator iter = find_if(v.begin(), v.end(), rnd);
v.insert(iter, rnd.getNum());
}
for (vector<int>::const_iterator iter = v.begin(); iter != v.end(); iter++)
cout << *iter << endl;
return 0;
}
首先,您想从一个空向量开始:
std::vector<int> v;
其次,您当前的随机数生成器Random_int
在num
中只生成一个数并保存它。您需要的是一个具有可更新状态的Random_int
:
class random_int_state{
public:
random_int_state(int low, int high) :
re{/* Assignment 1 - use a suitable seed for the random generator.
* maybe you could use a `time`stamp or a `random device`? */
},
dist{low,high},
num(dist(re)) {}
int getNum() const
{
return num;
}
bool operator()(int x) const
{
return (num <= x);
}
void nextState(){
/* Assignment 2 - how do you create a new state?
** what is the observable state of this object after all? */
}
private:
std::mt19937 re;
std::uniform_int_distribution<int> dist;
int num;
};
除此之外,您的插入排序算法运行良好。只需记住在程序开始时保持vector
为空,否则将得到前导零。
请注意,这个示例仍然需要您的代码,但这很容易。
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>
int main() {
std::default_random_engine re { std::random_device()() };
std::uniform_int_distribution<int> dist;
std::vector<int> v;
for(int i=0; i!=10; ++i) {
int r=dist(re);
auto it=std::lower_bound(v.begin(), v.end(), r);
v.insert(it, r);
}
std::copy(
v.cbegin(), v.cend(),
std::ostream_iterator<int>(std::cout, "n")
);
您的代码不必要地令人困惑,请考虑以上内容。因为向量是排序的,我们可以使用lower_bound
在O(log(n((而不是O(n(中找到插入的正确位置
相关文章:
- C++插入排序错误功能不起作用
- 链接列表中的所有节点都相同,似乎插入不起作用
- 使用链表.为什么我的插入功能不起作用?
- 使用 std::move 在开始时插入矢量的中间元素不起作用
- C++ ODBC SQL - 插入到表中不起作用
- 插入排序不起作用
- 选择在 Sqlite 数据库中有效,但插入和更新语句不起作用
- 插入二进制树(非BST)不起作用
- 非递归二进制树插入()方法不起作用
- 为什么链表中的插入函数不起作用?(C++)
- 二叉树递归插入方法不起作用
- C++:STL 映射,插入新值不起作用
- 在二叉搜索树中插入不起作用
- 从 stdin 复制不起作用,无法使用 libpqxx 在 C++ 中插入 postgres
- 二叉树插入不起作用
- 使用地图库插入不起作用
- 二进制搜索树递归插入导致堆栈溢出,迭代插入不起作用
- 关于STL向量的插入函数可能不起作用的场景的讨论
- 插入和合并排序在大数据集c++中不起作用
- 插入和提取运算符不起作用