RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-228791

Mikhailo's questions

Martin Hope
Mikhajlo
Asked: 2024-02-29 03:57:23 +0000 UTC

如何求平面上任意点的物体之间内切圆的最大半径?

  • 10

有一架飞机,上面有许多不同的物体。如果这很重要,那就让有不同半径的圆或正方形——这并不重要。就说圆圈吧。

对于任意点的任务是快速确定哪个邻域未被占用。也就是说,对于圆,我们只需查看从中心到该点的距离减去圆的半径,然后寻找最小值。

但圈子多,时间少。解决这个问题最简单的方法是什么?我研究了四叉树、R 树。但要么我不太理解他们的想法,要么他们适合找点,但不适合找圆。对于点 - 如果四叉树中最近的点位于相邻象限 - 这对我们有什么帮助?不管怎样,事实证明几乎整棵树都需要重新考虑?

告诉我在这种情况下应该使用什么算法?检查尽可能少的不同圆圈?

首先,我们可以假设这些圆不相交(如果有帮助的话)。但一般来说,这不是事实。

алгоритм
  • 1 个回答
  • 89 Views
Martin Hope
Mikhailo
Asked: 2023-07-22 05:03:13 +0000 UTC

如何完全删除单词中的提交?

  • 6

这是这样一种情况。带注释的示例提交历史记录。

  1. 正常commit,推送到github
  2. 正常提交
  3. 一次提交意外获得了一个新的 200 MB 文件
  4. 另一个承诺。
  5. 提交其中发现问题,文件已通过 git rm 删除

但是现在如果你将所有这些推送到github,那么你会遇到一个麻烦:那里不接受大文件,虽然它似乎不在提交5及更远的地方,但它在提交3和4中,虽然原则上不需要,但推送仍然尝试上传它。

在这种情况下,正确的做法是什么?当然,作为一个选项 - 回滚到提交 2,并手动重新添加所有内容,这在提交 3 和 4 中。但这似乎不是一个好的解决方案。最好的方法是什么?

git
  • 2 个回答
  • 39 Views
Martin Hope
Mikhailo
Asked: 2023-07-07 04:24:02 +0000 UTC

“向量或数组”的概念

  • 5

尝试针对当前情况提出一个概念

template<typename T, typename C>

其中 C 必须是vector<T>, 或array<T,N>具有任意N。自然is_same是不行的。你能告诉我该怎么做吗?

我可以在这里发布我失败的尝试,但是,在我看来,如果没有它们,我很明显已经尝试过了,这不是做作业的要求:)

添加用户7860670

我确实是这样的:

template<typename T, typename C>
class t_IsVectorOrArray
{
    public: static constexpr bool value{false};
};

template<typename T, typename Item, ::std::size_t count>
class t_IsVectorOrArray<T,::std::array<Item, count>>
{
    public: static constexpr bool value{is_same_v<T,Item>};
};

template<typename T, typename Args>
class t_IsVectorOrArray<T,::std::vector<Args>>
{
    public: static constexpr bool value{is_same_v<T,Args>};
};


template<typename T = double, typename C = vector<T>>
requires (t_IsVectorOrArray<T,C>::value)
struct Container
{
    C c;
};

你是认真的吗?

它似乎有效,但我必须删除矢量模板中的三个点。这很关键吗?从理论上讲,非默认分配器会遇到麻烦吗?

用户7860670的第二次添加

正如Yeralash的孩子所说,我明白它们不相交,但为什么它们不相交呢?

template<typename T, typename C>
class t_IsVectorOrArray
{
    public: static constexpr bool value{false};
};

template<typename T, ::std::size_t count>
class t_IsVectorOrArray<T,::std::array<T, count>>
{
    public: static constexpr bool value{true};     };

template<typename T, typename... Args>
class t_IsVectorOrArray<T,::std::vector<T, Args...>>
{
    public: static constexpr bool value{true};
};

template<typename T = double, typename C = vector<T>>
requires (t_IsVectorOrArray<T,C>::value)
struct Container
{
    C c;
};

int main()
{
    Container<int,vector<int>> c1;
    Container<int,vector<double>> c2;
    Container<int,array<double,5>> c3;
    Container<int,array<int,4>> c4;
    Container<int,list<int>> c5;
}

我试图将自己想象成一个编译器。

我懂了

Container<int,vector<int>> c1;

是的,所以在定义中

template<typename T = double, typename C = vector<T>>
requires (t_IsVectorOrArray<T,C>::value)
struct Container

我们已经有了T == intand C == vector<int>。我们不需要显示它们,它们是明确指定的。

现在您需要选择三个类别之一

class t_IsVectorOrArray<int,vector<int>>

class t_IsVectorOrArray<int,::std::array<int, count>>

class t_IsVectorOrArray<int,::std::vector<int, vector<int>>>

如果我是一个编译器,那么我会立即扔掉它array- 它需要某种count我没有的。保持

class t_IsVectorOrArray<int,vector<int>>
class t_IsVectorOrArray<int,::std::vector<int, vector<int>>>

但第二个定义是某种废话,它也应该被扔掉。第一个仍然是错误的。

我的推理有什么问题吗?

如果我们假设 for 的类型t_IsVectorOrArray<T,C>尚未派生,那么我们就没有任何东西可以派生它们。

C array- nen 至少在某种程度上是清楚的......有一个我们不知道的额外模板参数,但我们至少可以从定义中推断出它,例如,

    Container<int,array<int,4>> c4;

我们得到

class t_IsVectorOrArray<int,array<int, 4>>
class t_IsVectorOrArray<int,array<int, count>>
class t_IsVectorOrArray<int,vector<int,array<int, 4>>>

我们再次扔掉最后一个废话,在第二个我们可以推导出来count == 4,然后它通过定义

class t_IsVectorOrArray<int,array<int,4>>

其中参数其实是最简单的,简单int简单的4,而第一种情况第二个参数是 array<int,4>,所以选择第二种情况。

但在我看来,我在这里也不是这样说的。

那么应该如何呢?

c++
  • 2 个回答
  • 73 Views
Martin Hope
Mikhailo
Asked: 2023-05-12 16:11:31 +0000 UTC

我如何知道是否启用了按流量计费的连接?

  • 8

如何以编程方式找出当前哪个 Internet 连接受限或不受限?

那么,为了在您的程序中积极使用 Internet,或者非常有限地使用 Internet。

视窗 10。

PS 理想情况下,我还想跟踪切换的时刻,比如某种钩子——但这不再那么重要了。

c++
  • 2 个回答
  • 53 Views
Martin Hope
Mikhailo
Asked: 2022-07-15 18:53:54 +0000 UTC

编写你自己的范围过滤器

  • 0

我试图从 Rainer Grimm 的书“C++20 Get the details”中弄清楚如何使用 C++20 中的范围。

我想编写自己的过滤器,可以将容器传递给它(让它只是一个向量),并将过滤后的元素输出到其中并传递它。能够写出类似的东西

vect | views::filter(f1) | views::transform(f2) | copy_to(w) | views::filter(f3)

或多或少是这样的。那些。经过过滤和转换后,我们将其放入向量中w并进一步过滤自己。

只是完全困惑如何做这样的事情。begin()如果我理解正确,那么应该只有end()范围。所以?以及如何获取下一个元素并将其写下来?

如果某处有一个关于编写过滤器的简单描述(以及范围本身......我无法以任何方式理解它们,它是如何在里面的) - 我会很高兴听到。

我只是引用我的耻辱,以便由于缺乏我自己的尝试而没有解决这个问题。因为它是“只要它编译”的风格,因为完全误解了它应该如何工作......

using namespace std::ranges;

template<typename Container, std::ranges::input_range Range> requires std::ranges::view<Range>
class copy_to : public std::ranges::view_interface<copy_to<Container,Range>>
{
private:
    Container * c = nullptr;
    Range range_{};
    std::ranges::iterator_t<Range> begin_{ std::begin(range_) };
    std::ranges::iterator_t<Range> end_{ std::end(range_) };

public:
    //Container() = default;

    constexpr copy_to(Container& c, Range r): c(&c), range_(std::move(r)),
    begin_(std::begin(r)), end_(std::end(r))
    {
        for(auto b = begin_; b != end_; ++b) c->push_back(*b);
    }

    constexpr copy_to(Container& c): c(&c), begin_(std::begin(c)), end_(std::end(c))
    {
        for(auto b = begin_; b != end_; ++b) c->push_back(*b);
    }

    constexpr auto begin() const {
        return begin_;
    }
    constexpr auto end() const {
        return end_;
    }
};

template<typename Container, typename Range>
copy_to(Container&, Range&&) -> copy_to<Container, std::ranges::views::all_t<Range>>;
c++ range
  • 1 个回答
  • 31 Views
Martin Hope
Mikhailo
Asked: 2022-08-28 19:40:43 +0000 UTC

curl 通过 gmail 发送电子邮件

  • 1

新的攻击。一个大约两个月前通过 GMail 自动发送电子邮件的程序,使用

smtps://smtp.gmail.com:465

现在不起作用。是的,它是很久以前推出的,但我登录了 GMail 帐户 - 允许第三方应用程序。

现发行

* Expire in 0 ms for 6 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 0 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 1 ms for 1 (transfer 0x14a9e90)
* Expire in 4 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 2 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 8 ms for 1 (transfer 0x14a9e90)
* Expire in 13 ms for 1 (transfer 0x14a9e90)
*   Trying 108.177.14.109...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x14a9e90)
* connect to 108.177.14.109 port 465 failed: Timed out
* Failed to connect to smtp.gmail.com port 465: Timed out
* Closing connection 0

将端口更改为587,我们有

* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 4 ms for 1 (transfer 0x158a508)
* Expire in 8 ms for 1 (transfer 0x158a508)
* Expire in 9 ms for 1 (transfer 0x158a508)
* Expire in 9 ms for 1 (transfer 0x158a508)
* Expire in 16 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 32 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 64 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
* Expire in 50 ms for 1 (transfer 0x158a508)
*   Trying 108.177.14.108...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x158a508)
* Connected to smtp.gmail.com (108.177.14.108) port 587 (#0)
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 1/3)
* schannel: disabled server certificate revocation checks
* schannel: verifyhost setting prevents Schannel from comparing the supplied target name with the subject name
s in server certificates.
* schannel: sending initial handshake data: sending 176 bytes...
* schannel: sent initial handshake data: sent 176 bytes
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with smtp.gmail.com port 587 (step 2/3)
* schannel: encrypted data got 365
* schannel: encrypted data buffer: offset 365 length 4096
* schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Предоставленный функции
токен неправилен
* Closing connection 0

他不喜欢什么?我究竟做错了什么?GMail 有什么变化吗?登录密码未更改。

换句话说,迷茫...

c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2022-06-27 02:05:47 +0000 UTC

比较器的错误在哪里?

  • 4

为了好玩,我通过枚举所有排列来勾勒出一个关于 N 个皇后排列的问题。一切都很完美,获得了常规棋盘所需的 92 个排列。

我想得到一组排列——嗯,有多少根本不同的排列不是通过对称或旋转获得的。为此,我还添加map了一个比较向量的比较器,如果可以从另一个获得,则在比较时表示false。审查了测试示例 - 它似乎工作正常。但是map排列结果是通过对称获得的——他说总共有 46 个组。这显然是错误的——应该是 12!

我只是看不到我的错误,有人可以帮助我了解我到底在哪里做错了吗?Comporator有问题吗?

这是代码,它很小:

#include <vector>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <map>

using namespace std;

// Создание всех возможных расстановок с помощью симметрий
vector<vector<int>> makeV(const vector<int>& a) {
    const size_t N = a.size();
    vector<vector<int>> p(7, vector<int>(N));

    for (int i = 0; i < N; ++i) {
        p[0][i]            = int(N - 1 - a[i]); // H
        p[1][N - 1 - i]    = int(a[i]);         // V
        p[2][N - 1 - i]    = int(N - 1 - a[i]); // O
        p[3][a[i]]         = int(i);            // \s
        p[4][a[i]]         = int(N - 1 - i);    // ->
        p[5][N - 1 - a[i]] = int(i);            // <-
        p[6][N - 1 - a[i]] = int(N - 1 - i);    // /s
        }
    return p;
    }

// Класс для сравнения двух векторов (можно ли получить один
// из второго симметриями - тогда равны)
struct lessVec {

    bool operator()(const vector<int>& a, const vector<int>& b) const {
        if (a == b) return false;

        vector<vector<int>> p = makeV(a);

        // Если получается хоть одной симметрией - равны, вернуть false
        for (int i = 0; i < 7; ++i) if (b == p[i]) return false;

        // Обычное сравнение
        return a < b;
        }
    };

// true, если есть пара бьющих ферзей
bool fight(const vector<int>& p) {
    for (unsigned int i = 0; i < p.size() - 1; ++i) {
        for (unsigned int j = i + 1; j < p.size(); ++j) {
            if (int(j - i) == abs(p[j] - p[i])) return true;
            }
        }

    return false;
    }

// Решение для доски NxN
pair<int, int> solve(int N) {
    map<vector<int>, int, lessVec> m; // Сбор групп решений
    // Проверяю все перестановки
    vector<int> p(N);

    for (int i = 0; i < N; ++i) p[i] = i;

    int count = 0;  // Количество решений

    do {
        if (!fight(p)) {
            ++count;
            m[p]++;    // Сколько в группе решений
            }
        } while (next_permutation(p.begin(), p.end()));

    return make_pair(count, int(m.size()));
    }

int main() {
    for (int i = 8; i <= 8; ++i) {
        auto p = solve(i);
        cout << setw(2) << i << "  "
             << setw(7) << p.first << "  "
             << setw(7) << p.second << endl;
        }
    }
c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2022-06-02 21:29:27 +0000 UTC

隐藏控制台应用程序启动

  • 1

有一个服务器类型的 Windows 程序,作为控制台程序制作,但隐藏在后台深处,没有人可以看到或听到它(例如,editbin /subsystem:windows)。

还有第二个控制台程序不想写入文件,而只想写入输出流,无法获取其源代码。我想在第一个程序中得到它的输出。如果她写了一个文件——一切都会很好,让它成为非控制台(相同editbin),它的启动不会以任何方式表现出来。

如果您使用 redirect 运行它prog > file,该窗口仍会打开。如果您尝试通过类似start /min的操作 - 首先窗口cmd.exe打开,然后关闭,背景窗口仍然存在,尽管它不会破坏屏幕,但它会挂在任务栏中。这仍然是可以容忍的,但是整个屏幕上黑色窗口的“闪光”破坏了所有的美学)))我试过_popen了,它更糟。

有没有办法解决这个问题?从一个隐藏的程序中,调用一个带有输出重定向的控制台程序,让它在屏幕上暂时不可见?

调用程序是用 C++ 编写的,但这并不重要吗?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2022-05-22 23:36:23 +0000 UTC

关于火箭操作 <=>

  • 6

问题是如何乘坐火箭起飞:)

我说的是运营商<=>。起初在我看来,这将是一些简单的事情,比如strcmp- 返回小于、大于或等于。

第一个令人失望的是,它们会返回某种“左”类型,您甚至不会直接在if. 我决定我真的不需要他,他太奇怪了。

但是最近我遇到了一个注释,如果你只为你的类型定义它,那么你不需要编写一个比较运算符。例如,我开始寻找并阅读有关他的信息-但很明显他喝了一点:(没有添加清晰度。

如果我理解正确,有人可以帮助我理解通过定义一个运算符<=>,我会自动获得所有关系运算符吗?

以及如何正确定义它?

作为奖励:) - 为什么这么复杂?不只是,比如说,返回-1、0、+1?

好吧,或者告诉我在哪里有关于这个主题的一些咀嚼材料,最好是俄语。

c++
  • 2 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2022-05-09 20:34:12 +0000 UTC

在析构函数中处理异常

  • 8

众所周知,异常不能在析构函数中抛出。因为如果堆栈展开并且有一个析构函数,那么 - 阅读http://eel.is/c++draft/except.terminate#1.4

这很清楚。但是,如果在析构函数本身中抛出和捕获异常,而没有退出,那么标准对此有何看法?它只谈论terminate(),如果它只是UB怎么办?

我检查了 G++ 和 VC++ - 没问题。但是标准中有没有明确提到在处理异常的过程中允许抛出异常,只要它被捕获到了?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2021-12-14 00:23:38 +0000 UTC

如何在任务管理器中更改程序的名称?

  • 5

如何让任务管理器写起来不枯燥myprog,只是一个文件名,而对于像样的程序—— Superprog of Mikhajlo.

据我了解,它在资源中的某个地方VERSIONINFO,但无论我如何尝试,我都无法实现这一点 -myprog就是这样。这种 .rc 文件的最小示例看起来像写Superprog什么?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2021-11-20 17:38:51 +0000 UTC

正则表达式 - 如何正确删除嵌套括号?

  • 2

有一条线像(..(число)..). 可以有一个到多个括号,但括号放置正确 - 例如,

(((((4)))((5))))

如何去掉括号?我做了这样的事情 -

regex rx("\\((\\d*)\\)");

然后反复 - 直到截止日期改变 - 替换:

string out = s;
while( (out = regex_replace(s,rx,"$1")) != s) s = out;

但在我看来,嵌套括号可以一次性删除,我只是不知道如何。

告诉我谁知道。

c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-10-06 14:12:53 +0000 UTC

iostream 和 char* 流

  • 6

上面的代码编译gcc但不编译 Visual C++。

严格按照标准,哪一个是错的?我假设这是一个 gcc 扩展,但我没有在标准中找到证明(我没有找到>>(char*)- 这是证明吗?)。

#include <iostream>

int main() {
    char* c = new char[200];
    char s[200];
    std::cin >> s;
    std::cin >> c;  // Visual C++ сообщает об ошибке C2679
    std::cout << s;
    std::cout << c;
    }
c++
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-05-20 18:33:38 +0000 UTC

Excel - 标准偏差“如果”

  • 0

如何完成这样的任务?Excel中有一个表格,尽可能简化 - A列有样本编号,B列有值。计算整个样本的平均值很简单——比如

=СРЗНАЧ(B2:B25)

简单和标准偏差 -

=СТАНДОТКЛОН.Г(B2:B25)

计算组的平均值也不是那么困难 - 在单独的单元格(例如 X1)中,组号和类型

=СРЗНАЧЕСЛИМН(B2:B25;A2:A25;X1)

以及如何计算每组的偏差?只有表很宽,有很多列,行组可以改变——所以我不想明确指定组范围。更好的是您可以参考的单独的单元格号码。

excel
  • 2 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-12-22 14:37:04 +0000 UTC

条件变量 - 错误在哪里?

  • 1

由于其他人的问题,我再次提出了一个问题——这次是这个问题。

我想尝试并行编程并通过条件变量解决问题(一个线程将字符串添加到列表中,另一个从那里获取它们,对它们进行排序并将它们写入自己的线程)。它似乎有效,但有时会关闭

......
<-- String consumed
<-- Wait string produced
--> String produced
--> Wait string consumed

值得。我哪里傻了?如果我尝试向条件变量添加条件,它只会变得更糟。

这是我的代码:

#include <list>
#include <string>
#include <iostream>
#include <iomanip>
#include <thread>
#include <condition_variable>
#include <algorithm>
#include <ctime>

using namespace std;

constexpr int ELEMENTS = 10;

void printList(const list<string>& l) {
    cout <<"LIST:\n";
    for(const auto& s: l) cout << s << " ";
    cout << endl;
    }

string new_string() {
    string s;
    for(int i = rand()%8+1; i > 0; --i)
        s += rand()%26+'a';
    return s;
    }

// Сигналы о том, что строка готова и что обработана
condition_variable strReady, strHandled;
mutex mReady, mHandled;

void createList(list<string>& l) {
        {
        unique_lock lck(mHandled); // Ждем запуска второго потока
        strHandled.wait(lck);      // Без проверок, так как заведомо знаем,
        }                              // что он один

    for(int i = 0; i < ELEMENTS; ++i) {
        // Начинает создавать
        string s = new_string();
        l.push_back(s);

        cout << "--> String produced" << endl;

        strReady.notify_one();     // Уведомляем о готовности строки

        cout << "--> Wait string consumed" << endl;

        unique_lock lck(mHandled); // и ждем разрешения работать
        strHandled.wait(lck);      // Без проверок, так как заведомо знаем,
        }                              // что поток обработчика единственный
    }

void handleList(list<string>& l1, list<string>& l2) {

    strHandled.notify_one();       // Сообщаем о запуске, можно работать

    for(int i = 0; i < ELEMENTS; ++i) {
        string s;
        // Ждет сигнала
            {
            unique_lock lck(mReady);
            strReady.wait(lck);    // Без проверок, так как заведомо знаем,
            // что поток создателя единственный

            s = l1.back();
            cout << "<-- String consumed" << endl;
            }

        strHandled.notify_one();   // Строка скопирована, сообщаем, что
        // можно работать дальше
        sort(s.begin(),s.end());
        l2.push_back(s);
        cout << "<-- Wait string produced" << endl;
        }
    }

int main() {
    srand(time(0));

    list<string> l1, l2;
    thread t1(createList,ref(l1));
    thread t2(handleList,ref(l1),ref(l2));
    t1.join();
    t2.join();

    printList(l1);
    printList(l2);

    }

仍然 neponyatka - is srand(time(0)),但线条总是相同的。

c++
  • 2 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-12-21 17:19:35 +0000 UTC

算法越来越好

  • 1

这里的问题是关于算法的复杂性,是否有可能知道算法的“O”和某个 N 的时间,来估计另一个 N 的时间。

根据 O 表示法的定义,它在某个 N 之后开始渐近逼近。也许是一个大的 N。

但是理论上是不是对于小 N,我们有某种“坏”依赖(嗯,像 N 2甚至 N!),对于大 N(像 N 或 N * log (N ))?

如果是这样,有什么实际的例子吗?只是不是发明的,而是来自现实生活?

алгоритм
  • 1 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-01-27 19:27:30 +0000 UTC

长算术用什么?

  • 4

我想要一些很长的整数,但同时又很简单。尽管我在 VC ++ 上工作(现在是 2017 年)。

据我了解,Windows 下的 GMP 不能强制工作,除非您使用 gcc。

我找到了 MPIR,它似乎可以在 VC ++ 2017 下编译,但我就是做不到——总是有一些错误(比如

LINK : fatal error LNK1181: не удается открыть входной файл "x64\Release\mpn\add_err1_n.obj"
EXEC : error : 'output_params.bat' not found

我听说 Boost 似乎有这样的功能——多精度而不使用 GMP 或其他东西,纯粹是我自己的。

当然,我想要速度,但更希望在发布新版本时在组装和重新组装过程中不出现问题。所以请帮我回答以下问题之一:

  1. 如何从这里在 VC++ MPIR 下编译- 您需要 32 位和 64 位选项,没有 DLL(普通 LIB)。

  2. 或者,如果有这样一个不依赖于外部库的Boost,那么究竟如何找到和使用呢?我发现需要 GMP。如果有 - 究竟要下载和安装什么,所以不是整个 Boost,而只是这一部分 - 到最低限度?

  3. 如果有另一种更简单但可靠的选择 - 告诉我。

首先,整数算术是有趣的,浮点数 - 当然,一个不错的奖励,但不是那么强制性。

c++
  • 2 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-01-26 02:11:17 +0000 UTC

我怎样才能使 (x==1 && x==2 && x==3 && x==4) 返回真?

  • 26

今天问了一个有趣的 C++ 问题——如何实现

(x==1 && x==2 && x==3 && x==4) 

有关系true吗?

c++
  • 9 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-01-22 19:39:55 +0000 UTC

在编译时获取素数表

  • 4

据说模板编程是从计算素数开始的。所以编译器肯定可以在编译时计算出来。甚至我也能以某种方式编写或重写这样的模板:

template<unsigned p, unsigned d>
struct DoIsPrime {
    static constexpr bool value = (p%d != 0) && DoIsPrime<p,d-1>::value;
    };

template<unsigned p>
struct DoIsPrime<p, 2> {
    static constexpr bool value = (p % 2 != 0);
    };

template<unsigned p>
struct IsPrime {
    static constexpr bool value = DoIsPrime < p, p / 2 >::value;
    };

template<>
struct IsPrime<0> {
    static constexpr bool value = false;
    };
template<>
struct IsPrime<1> {
    static constexpr bool value = false;
    };
template<>
struct IsPrime<2> {
    static constexpr bool value = true;
    };
template<>
struct IsPrime<3> {
    static constexpr bool value = true;
    };

template<unsigned p>
bool isPrime = IsPrime<p>::value;

你还怎么救他们?现在如何在编译时编写素数表?比方说得到

unsigned int p[] = { }

p[i]直到某个边界的素数在哪里?p[0]=2,p[1]=3等等?

c++
  • 2 个回答
  • 10 Views
Martin Hope
Mikhailo
Asked: 2020-12-27 01:14:30 +0000 UTC

为任意类型的数组分配无类型内存

  • 6

如果我为某种类型分配内存T- 让它在模板中,让我们说 -

template<typename T>
char* alloc(size_t n) { return new char[n*sizeof(T)] ; }

那么是否有足够的空间来存放n具有类型的元素T?有对齐问题吗?如果他们可以 - 如何正确解决它们?

另外-根据@VladD的建议,我尝试分配具有特殊对齐要求的内存:

#include <iostream>
#include <typeinfo>

using namespace std;

struct alignas(256) D {
    char a;
    char b;
    };

template<typename T>
void* alloc(size_t n) {
    return reinterpret_cast<void*>(new
                                   aligned_storage<sizeof(T), alignof(T)>[n]);
    }

template<typename T>
int allocSize() {
    cout << "sizeof = " << sizeof(T) << ", alignof = " << alignof(
             T) << endl;
    cout << "type = " << typeid(typename
                                aligned_storage<sizeof(T), alignof(T)>::type).name() << endl;
    return sizeof(typename
                  aligned_storage<sizeof(T), alignof(T)>::type);
    }


int main() {
    cout << allocSize<D>() << endl;
    cout << alloc<D>(5) << endl;
    }

GCC 无法解决 - https://ideone.com/dgo75h。但 Visual Studio 工作正常,但发出:

sizeof = 256, alignof = 256
type = union std::_Align_type<double,256>
256
004A1258

那些。我理解大小和对齐方式,但地址显然没有对齐到 256。我不需要这种对齐方式,这是真的,游戏 - 但事实证明,这样分配内存是不可能的?

c++
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5