这个例子很容易解释我的问题:
class Vector3
{
float _x;
float _y;
float _z;
public :
/// constructors and stuff
};
class Point : public Vector3
{
// some BS
Point(float _x):Vector3(float _x)
{}
};
main()
{
Point aPoint(3);
Point anotherPoint(4);
// WHY DOES THIS WORK and copy _x,_y & _z properly
aPoint = anotherPoint;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我无法理解为什么=派生类可以复制_x,_y并且_z,即使它不应该访问它们,因为它们是私有的.
我有strValue作为NSString,我想复制strValueS含量"到另一个地方.
这个地方是mstrValue,这是NSMutableString.空间mstrValue已经分配.
我想知道我如何使用memcpy或strcpy为此目的.
如果不可能,我想知道其他方法.
我正在尝试对一个相当大的项目进行一个Instrumentation Profiling(在整个解决方案中大约40,000个源文件,但是在分析中的项目有大约200个源文件),用C++编写.
每次我运行分析时,它会创建一个大约34GB的巨大报告,然后,当它要分析它时,它正在尝试(我认为)将整个文件加载到RAM中.
显然,它使计算机无法使用,我必须在分析仪完成之前停止它.
有什么建议?
我一直在寻找的源代码std::function,并std::bind在GCC-4.7.2,和整个使用成员函数指针,我有些不明白的语法来了.
我不明白的是_Maybe_wrap_member_pointer:
template<typename _Tp, typename _Class>
struct _Maybe_wrap_member_pointer<_Tp _Class::*> // note no comma here
Run Code Online (Sandbox Code Playgroud)
为什么_Tp和之间没有逗号_Class::*?
由于成员函数void foo::bar()(在下面我示例应用程序),你会_Tp和_Class::*决心吗?
下面是我的示例应用程序,它绑定成员函数指针和对象.(我已经提取了与std::bind成员函数的特化/内部相关的源代码)
#include <iostream>
#include <functional>
template<typename T>
struct _Maybe_wrap_member_pointer;
template<typename _Tp, typename _Class>
struct _Maybe_wrap_member_pointer<_Tp _Class::*> // <-- I don't understand this
{ // why not <_Tp, _Class::*>
typedef std::_Mem_fn<_Tp _Class::*> type;
static type __do_wrap(_Tp _Class::* __pm)
{
return type(__pm);
}
};
template<typename _Func, typename... …Run Code Online (Sandbox Code Playgroud) 我有一个std::map的HANDLE对象,
std::map<int, HANDLE> MyMap;
我必须使用WaitForMultipleObjects()函数等待这些句柄对象.为此,我必须将地图内容作为HANDLE对象的数组.(如果它是一个向量,那么我们可以使用vector.data()函数).我正在寻找这样一个简单的功能来实现这一目标.
我正在创建一个小应用程序,需要使用模板功能.几乎应该要求用户输入一些数据类型中的2,然后告诉他们两者中哪一个更大.所以作为模板函数,我想告诉我传递给我的函数的内容.例如,如果该功能需要双打,我希望能够询问用户"输入2个双打".等等.这是函数调用和设置:
int main(){
getInput(intA, intB);
getInput(doubleA, doubleB);
...
}
template <typename TYPE>
TYPE getInput(TYPE a, TYPE b){
cout << "Enter 2 " << TYPE << endl;
cin >> a >> b;
...
}
Run Code Online (Sandbox Code Playgroud)
这个应用程序正在进行中,但它只是让我要求用户"输入一些输入"等等.甚至不确定这是否可行,但认为它会很酷.
C++ std :: priority_queue只需要一个部分顺序.但如果它的实现是二进制堆,它是如何工作的?例如:假设我们有一个偏序集( {a, b, c, x}, {c < b, b < a, c < a} ),x具有无关a,b,c.那么最大堆是:
layer 1: x
layer 2: b x
layer 3: x x a c
Run Code Online (Sandbox Code Playgroud)
在弹出操作之后,以教科书中常见的方式,即用root替换root c并将大小减小1.然后我们需要在下面的树根下堆积树:
layer 1: c
layer 2: b x
layer 3: x x a
Run Code Online (Sandbox Code Playgroud)
我们会互换c,b因为c < b,不是吗?什么?从那以后我们仍然没有有效的堆b < a.但b不能"看" a.
我看到的每个链接总是提到GetVersionEx,但这似乎没有用.
我的方法看起来像这样,
static int windowsVersion() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
return osvi.dwMajorVersion;
}
Run Code Online (Sandbox Code Playgroud)
我正在运行Windows 8,而它返回6.
如果我正在尝试准确地获取他们的Windows版本,那不是很有帮助.
注意:我还检查了所有其他变量.dwMinorVersion返回4,内部版本号返回类似8400的内容.
bool hasId(string id, vector<User>& map)
{
User ans = *(find_if(map.begin(), map.end(), [&](User d)
{ return (id==(d).uid());}));
return ans.uid() == id;
}
Run Code Online (Sandbox Code Playgroud) 我的代码如下:
int main()
{
thread t[10];
for (int i = 0;i < 10; i++)
t[i] = thread(print,i);//thread creation
for (int i = 0;i < 10; i++)
t[i].join();//waiting maiin to threads to cpmleate execution
cout << "in main";
}
void print(int i) {
cout<<"i:"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
这是最有效的方式,还是有更有效的方法来减少运行时间?