小编Dan*_*ani的帖子

如何在迭代时从地图中删除?

如何在迭代时从地图中删除?喜欢:

std::map<K, V> map;
for(auto i : map)
    if(needs_removing(i))
        // remove it from the map
Run Code Online (Sandbox Code Playgroud)

如果我使用map.erase它将使迭代器无效

c++ map c++11

160
推荐指数
6
解决办法
10万
查看次数

我在哪里可以找到C++ 11标准论文?

可能重复:
我在哪里可以找到当前的C或C++标准文档?

我在哪里可以找到完整的C++ 11标准?我知道它的特征是漂浮在互联网上,但我似乎无法找到文件本身.

c++ c++11

53
推荐指数
3
解决办法
3万
查看次数

为什么在目标c中允许自我在静态环境中

为什么self在Objective-C中使用静态上下文?

我认为这是允许的,然后我遇到了内存错误,花了我一个星期才发现这self不是从类调用其他静态方法而不是键入类名的别名.

Xcode及其编译器似乎非常聪明地找到常见的陷阱,为什么它甚至不会产生类似的警告呢?

xcode objective-c

41
推荐指数
3
解决办法
8519
查看次数

具有参考成员的分配操作员

这是创建具有引用成员的赋值运算符的有效方法吗?

#include <new>

struct A
{
    int &ref;
    A(int &Ref) : ref(Ref) { }
    A(const A &second) : ref(second.ref) { }
    A &operator =(const A &second)
    {
        if(this == &second)
            return *this;
        this->~A();
        new(this) A(second);
        return *this;
    }
}
Run Code Online (Sandbox Code Playgroud)

它似乎编译并运行良好,但是当c ++倾向于表现出最不期望的未定义行为时,以及所有说它不可能的人,我认为我错过了一些问题.我错过了什么吗?

c++ reference

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

移动构造函数是自动生成的吗?

我有一个大班,拿着很多STL容器.
编译器会自动创建一个移动构造函数来将这些容器移动到目标,还是我必须自己创建?

c++ move-constructor c++11

32
推荐指数
1
解决办法
8750
查看次数

最初在Qt Creator中隐藏控件

我想仅在选择单选按钮时才显示组框.
我设法通过toggled(bool)将单选按钮的信号连接到setShown(bool)组框的插槽来实现.
问题是最初取消选择单选按钮但最初显示组框,所以我必须选择/取消选择单选按钮使其消失.
有没有什么办法可以让Qt Creator Designer中的组框最初不可见而不必在代码中执行?

qt qt-creator qt-designer

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

从文件中获取类名

我有一个只包含一个类的php文件.通过了解文件名,我怎么知道哪个类?我知道我可以用regexp匹配做一些事情,但是有标准的php方式吗?(该文件已包含在试图找出类名的页面中).

php reflection

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

C#手动锁定/解锁

我在C#中有一个函数,可以从多个线程多次调用,我希望它只能完成一次,所以我想到了这个:

class MyClass
{
    bool done = false;
    public void DoSomething()
    {
        lock(this)
            if(!done)
            {
                done = true;
                _DoSomething();
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是_DoSomething需要很长时间,我不希望很多线程等待它,只要他们可以看到这done是真的.
这样的事情可以解决方法:

class MyClass
{
    bool done = false;
    public void DoSomething()
    {
        bool doIt = false;
        lock(this)
            if(!done)
                doIt = done = true;
        if(doIt)
             _DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

但只需手动锁定和解锁就会好得多.
我怎样才能手动锁定和解锁lock(object)?我需要它使用相同的接口,lock因此这种手动方式lock将相互阻塞(对于更复杂的情况).

c# multithreading locking

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

NSArray怎么会这么慢?

我来自C++/STL世界,我想检查Objective-c容器与stl相比如何.

我想比较一个数字数组,但是添加一个数字的唯一方法NSArray是使用NSNumber,这是非常慢,并且我的ram空了,所以我想我需要手动解除它们.但我不想测试副作用,所以我只是添加[NSNull null]到数组中.

将10k内容添加到阵列1k次的结果:
NSArray- 0.923411秒
vector<int>- 0.129984秒

我认为它可能是分配和解除分配所以我将数组的数量(imax在代码中)设置为1和添加数量为10000000(jmax)但它甚至更慢
NSArray- 2.19859秒
vector<int>- 0.223471秒

编辑:
正如在评论中提到的阵列的不断增加的大小可能是问题,所以我做了NSArray使用arrayWithCapacity,但vectorreserve(!),也和它比以前更慢(imax= 1,jmax= 10000000).
NSArray- 2.55942
vector<int>- 0.19139
结束编辑

为什么这么慢?

我的代码供参考:

#import <Foundation/Foundation.h>
#include <vector>
#include <iostream>
#include <time.h>

using namespace std;

int main (int argc, const char * argv[])
{
    int imax = 1000;
    int jmax = 10000; …
Run Code Online (Sandbox Code Playgroud)

optimization stl objective-c

13
推荐指数
3
解决办法
3677
查看次数

为什么不自动确定类模板构造函数参数?

考虑以下课程:

template<typename T1, typename T2>
class Pair
{
     public:
         T1 First;
         T2 Second;
         Pair(const T1 &First, const T2 &Second) : First(First), Second(Second) { }
}
Run Code Online (Sandbox Code Playgroud)

c ++中不允许以下内容:

auto p = Pair(10, 10);
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?类型可以从构造函数调用中完全确定.
我知道有一些解决方法,如:

template<typename T1, typename T2>
Pair<T1, T2> MakePair(const T1 &First, const T2 &Second)
{
    return Pair<T1, T2>(First, Second);
}
Run Code Online (Sandbox Code Playgroud)

但为什么需要呢?为什么编译器不能像从函数模板那样从参数中确定类型?你可能会说它因为标准不允许它,所以为什么标准不允许呢?

编辑:
对于那些说这是一个例子的人,为什么不允许这样做:

template<typename T1, typename T2>
class Pair
{
     public:
         T1 First;
         T2 Second;
         Pair(const T1 &First, const T2 &Second) : First(First), Second(Second) { }
         Pair(const T2 …
Run Code Online (Sandbox Code Playgroud)

c++ templates

13
推荐指数
2
解决办法
3539
查看次数