如何在迭代时从地图中删除?喜欢:
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或C++标准文档?
我在哪里可以找到完整的C++ 11标准?我知道它的特征是漂浮在互联网上,但我似乎无法找到文件本身.
为什么self在Objective-C中使用静态上下文?
我认为这是允许的,然后我遇到了内存错误,花了我一个星期才发现这self不是从类调用其他静态方法而不是键入类名的别名.
Xcode及其编译器似乎非常聪明地找到常见的陷阱,为什么它甚至不会产生类似的警告呢?
这是创建具有引用成员的赋值运算符的有效方法吗?
#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 ++倾向于表现出最不期望的未定义行为时,以及所有说它不可能的人,我认为我错过了一些问题.我错过了什么吗?
我有一个大班,拿着很多STL容器.
编译器会自动创建一个移动构造函数来将这些容器移动到目标,还是我必须自己创建?
我想仅在选择单选按钮时才显示组框.
我设法通过toggled(bool)将单选按钮的信号连接到setShown(bool)组框的插槽来实现.
问题是最初取消选择单选按钮但最初显示组框,所以我必须选择/取消选择单选按钮使其消失.
有没有什么办法可以让Qt Creator Designer中的组框最初不可见而不必在代码中执行?
我有一个只包含一个类的php文件.通过了解文件名,我怎么知道哪个类?我知道我可以用regexp匹配做一些事情,但是有标准的php方式吗?(该文件已包含在试图找出类名的页面中).
我在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++/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,但vector用reserve(!),也和它比以前更慢(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) 考虑以下课程:
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++ ×5
c++11 ×3
objective-c ×2
c# ×1
locking ×1
map ×1
optimization ×1
php ×1
qt ×1
qt-creator ×1
qt-designer ×1
reference ×1
reflection ×1
stl ×1
templates ×1
xcode ×1