标签: construction

如何构建堆是O(n)时间复杂度?

有人可以帮助解释如何构建堆是O(n)复杂性?

将项插入堆中O(log n),并且插入重复n/2次(其余为叶,并且不能违反堆属性).所以,这意味着复杂性应该是O(n log n),我想.

换句话说,对于我们"堆积"的每个项目,它有可能必须针对堆的每个级别过滤一次(这是log n级别).

我错过了什么?

algorithm heap complexity-theory construction

429
推荐指数
9
解决办法
24万
查看次数

C++中单例的线程安全延迟构造

有没有办法在C++中实现单例对象:

  1. 懒惰地以线程安全的方式构造(两个线程可能同时是单例的第一个用户 - 它应该仍然只构造一次).
  2. 不依赖于事先构造的静态变量(因此单例对象在构造静态变量期间本身是安全的).

(我不太了解我的C++,但是在执行任何代码之前初始化积分和常量静态变量的情况(即,甚至在执行静态构造函数之前 - 它们的值可能已在程序中"初始化")如果是这样的话 - 也许这可以被利用来实现单例互斥体 - 这反过来可以用来保护真正的单例的创建......)


很好,现在我似乎有几个好的答案(羞耻我不能标记2或3作为答案).似乎有两个广泛的解决方案:

  1. 使用POD静态变量的静态初始化(而不是动态初始化),并使用内置原子指令实现我自己的互斥锁.这是我在问题中暗示的那种解决方案,我相信我已经知道了.
  2. 使用其他库函数,如pthread_onceboost :: call_once.这些我当然不知道 - 并且非常感谢所发布的答案.

c++ singleton construction multithreading lazy-initialization

36
推荐指数
5
解决办法
2万
查看次数

什么是int()调用?

它已被反复重复,原始类型没有构造函数.例如_bar,当我调用时,这不会初始化为0 Foo():

class Foo{
    int _bar;
};
Run Code Online (Sandbox Code Playgroud)

所以显然int()不是构造函数.但它的名字什么?

在这个例子中我会说i:(构造?初始化?fooed?)

for(int i{}; i < 13; ++i)
Run Code Online (Sandbox Code Playgroud)

Loki Astari 在这里提到该技术有某种名称.

编辑回应Mike Seymour:

#include <iostream>

using namespace std;

class Foo{
    int _bar;
public:
    void printBar(){ cout << _bar << endl; }
};

int main()
{
    Foo foo;

    foo.printBar();

    Foo().printBar();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013上运行此代码产生:

3382592
3382592

有趣的是gcc 4.8.1收益率:

134514651
0

c++ primitive construction initialization nomenclature

15
推荐指数
2
解决办法
2193
查看次数

使用Java生成程序化HTMLDocument

有没有人知道如何在Java中以编程方式生成HTMLDocument对象而不需要外部生成String然后使用HTMLEditorKit #read来解析它?我问的两个原因:

首先,我的HTML生成例程需要非常快,我认为将字符串解析为内部模型比直接构建此模型更昂贵.

其次,面向对象的方法可能会导致更清晰的代码.

我还应该提一下,出于许可的原因,我不能使用除JVM附带的库之外的任何库.

谢谢,汤姆

html java construction

11
推荐指数
2
解决办法
2万
查看次数

引用您声明的相同变量

在使用C++代码时,我已经看过几次类型错误:

QString str = str.toUpper();
Run Code Online (Sandbox Code Playgroud)

这可能是一个相当容易犯的错误,但它编译和执行(有时崩溃,有时没有).我看不出任何你想要做的事情.

一些测试表明,复制构造函数是调用的,而不是默认的,并且该对象是从复制构造函数中给出的.

任何人都可以解释为什么这不是编译器错误,甚至是警告?

c++ construction

11
推荐指数
1
解决办法
185
查看次数

在"Here"打印之前,不应该销毁临时A(3)吗?

A(3)在"Here"打印之前,不应该暂时销毁吗?

#include <iostream>
struct A
{
    int a;
    A() { std::cout << "A()" << std::endl; }
    A(int a) : a(a) { std::cout << "A(" << a << ")" << std::endl; }
    ~A() { std::cout << "~A() " << a << '\n'; }
};

int main()
{
    A a[2] = { A(1), A(2) }, A(3);
    std::cout << "Here" << '\n';
}
Run Code Online (Sandbox Code Playgroud)

输出:

A(1)
A(2)
A(3)
Here
~A() 3
~A() 2
~A() 1
Run Code Online (Sandbox Code Playgroud)

实例

c++ construction temporary destruction

10
推荐指数
2
解决办法
324
查看次数

jquery小部件,_create或_init

一些jquery插件扩展小部件使用_create方法,而其他人使用_init方法,有人可以解释两者之间的差异吗?

关于何时扩展小部件或直接扩展jquery.fn的任何指导?

jquery construction jquery-ui widget

8
推荐指数
2
解决办法
1万
查看次数

临时函数调用的构造被解释为声明

最近我遇到了一个问题,不知何故(但只是某种程度上)对我有意义.它基于解释临时的构造作为单个(!)构造函数参数的声明.请看下面的最小例子.

#include <iostream>

class Foo0{
public:
  Foo0(int a){};
  void doStuff() {std::cout<<"maap"<<std::endl;};
};

class Foo1{
public:
  Foo1(int a){};
  void doStuff() {std::cout<<"maap"<<std::endl;};
};

class Foo2{
public:
  Foo2(int a){};
  void doStuff() {std::cout<<"maap"<<std::endl;};
};

class Bar{
public:
  Bar(Foo0 foo0, Foo1 foo1, Foo2 foo2){};
};

int main () {
  int x = 1;

  Bar bar0(Foo0(x), Foo1(x), Foo2(x)); // Does not work: conflicting declaration ‘Foo1 x’ previous declaration as ‘Foo0 x’; conflicting declaration ‘Foo2 x’ previous declaration as ‘Foo0 x’
  Bar bar1(Foo0{x}, Foo1(x), Foo2(x)); // Works …
Run Code Online (Sandbox Code Playgroud)

c++ construction temporary most-vexing-parse

8
推荐指数
1
解决办法
523
查看次数

用 Haskell 广度优先构建二叉树(非 BST)

我最近开始使用 Haskell,可能会持续一段时间。只是被要求使用它来更好地理解我在 Uni 上的课程的函数式编程。

现在我有一个小问题,我目前正在尝试做的事情。我想以广度优先来构建它,但我认为我的条件搞砸了,或者我的条件也错了。

所以基本上,如果我把它 [“A1-Gate”, “North-Region”, “South-Region”, “Convention Center”, “Rectorate”, “Academic Building1”, “Academic Building2”][0.0, 0.5, 0.7, 0.3, 0.6, 1.2, 1.4, 1.2]我的树应该站出来像

我试图实现的树布局

但是我的试运行结果哈哈不是我所期望的。因此,Haskell 方面的一位特别敏锐的专家可能会帮助我发现我做错了什么。输出:

*Main> l1 = ["A1-Gate", "North-Region", "South-Region", "Convention Center", 
             "Rectorate", "Academic Building1", "Academic Building2"]
*Main> l3 = [0.0, 0.5, 0.7, 0.3, 0.6, 1.2, 1.4, 1.2]
*Main> parkingtree = createBinaryParkingTree l1 l3
*Main> parkingtree
Node "North-Region" 0.5 
   (Node "A1-Gate" 0.0 EmptyTree EmptyTree) 
   (Node "Convention Center" 0.3 
     (Node "South-Region" 0.7 EmptyTree EmptyTree) 
     (Node …
Run Code Online (Sandbox Code Playgroud)

tree construction binary-tree haskell breadth-first-search

8
推荐指数
2
解决办法
1500
查看次数

有谁知道为什么 TWEAK 例程在 BUILD 例程之前被命中?

最小代码:

 #!/usr/bin/raku

 class   Widget {
         submethod TWEAK(:$content, :$styles) {
                 say "t1\n";
         }
 }

 class   File is Widget {
         submethod BUILD() {
                 say "b1";
         }
 }

 my $xml = File.new();
Run Code Online (Sandbox Code Playgroud)

和输出:

 t1

 b1
Run Code Online (Sandbox Code Playgroud)

相关文档位于https://docs.raku.org/language/objects#Object_construction。我引用:“在调用 BUILD 方法之后,调用名为 TWEAK 的方法(如果存在),再次将所有命名参数传递给 new”。

我正在使用 Fedora 32 附带的 rakudo 版本(rakudo-0.2020.02-1.fc32.x86_64 所以可能是今年 2 月)。

construction object tweak rakudo raku

8
推荐指数
2
解决办法
116
查看次数