我的大小是1.不应该是4吗?我将整数的地址插入集合中.
void func(set<int*>& s1, set<int*>& s2, int a)
{
s1.insert(&a);
s2.insert(&a);
}
int main()
{
set<int*> s1, s2;
int a = 1, b = 2, c = 3, d = 4;
func(s1, s2, a);
func(s1, s2, b);
func(s1, s2, c);
func(s1, s2, d);
cout<<" s1.size = "<<s1.size()<<" s2.size = "<<s2.size()<<endl;
}
Run Code Online (Sandbox Code Playgroud) 我有两个字符串:
string1 - hello how are you,
String2 - olo(包括空格字符)
输出:lo ho (HEL LO浩 w为你)
lo ho是包含string2所有字符的唯一子字符串.任何人都可以为此建议一个好的算法(我可以认为og只有Brute Force算法 - O(n ^ 2).
输出也应该是最小长度字符串(如果有多个选项).
C++ 11引入了一个新的rvalue引用概念.我正在某处读它,发现如下:
class Base
{
public:
Base() //Default Ctor
Base(int t) //Parameterized Ctor
Base(const Base& b) //Copy Ctor
Base(Base&& b) //Move Ctor
};
void foo(Base b) //Function 1
{}
void foo(Base& b) //Function 2
{}
int main()
{
Base b(10);
foo(b); -- Line 1 (i know of ambiquity but lets ignore for understanding purpose)
foo(Base()); -- Line 2
foo(2) ; -- Line 3
}
Run Code Online (Sandbox Code Playgroud)
现在我的理解有限,我的观察结果如下:
第1行将简单地调用复制构造函数,因为参数是左值.
在C++ 11之前的第2行会调用复制构造函数和所有那些临时复制内容,但是定义了移动构造函数,这里将调用它.
第3行将再次调用move构造函数,因为2将隐式转换为Base类型(rvalue).
请纠正并解释上述任何观察结果是否错误.
现在,这是我的问题:
我知道一旦我们移动一个物体,它的数据就会在呼叫位置丢失.所以,我在上面的例子中如何更改第2行以在foo中移动对象"b"(是否使用std :: move(b)?).
我读过移动构造函数比复制构造函数更有效.怎么样?我只能想到在移动构造函数的情况下我们在堆上有内存的情况不需要再分配.当我们在堆上没有任何内存时,这个陈述是否成立?
它是否比通过引用传递更有效(不,对吧?)?
我有以下代码
class base
{
private:
int k;
public:
base(const base& b){ this->k = b.k; cout<<" c-ctor "<<endl; }
base(int a = 10){ k = a; cout<<" a = "<<a<<endl; }
friend const ostream& operator<<(ostream& out, base& b)
{
return out<<b.k<<endl;
}
};
int main()
{
base b, b1(2);
vector<base> vec = {b, b1};
cout<<" check point "<<endl;
for(auto& elem : vec)
cout<<" "<<elem;
cout<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1- a = 10
2- a = 2
3- c-ctor
4- c-ctor …Run Code Online (Sandbox Code Playgroud) 给定一个整数的数组arr [],找出任何两个元素之间的差异,使得较大的元素出现在arr []中较小的数字之后.
Max Difference = Max { arr[x] - arr[y] | x > y }
Run Code Online (Sandbox Code Playgroud)
例子:
如果[2, 3, 10, 6, 4, 8, 1, 7]返回数组,则值应为8(10和2之间的差值).
如果[ 7, 9, 5, 6, 3, 2 ]返回数组,则值应为2(7到9之间的差异)
我的算法:
我想过使用D&C算法.说明
2, 3, 10, 6, 4, 8, 1, 7
then
2,3,10,6 and 4,8,1,7
then
2,3 and 10,6 and 4,8 and 1,7
then
2 and 3 10 and 6 4 and 8 1 and 7
Run Code Online (Sandbox Code Playgroud)
在这里,因为这些元素将保持相同的顺序,我将得到最大的差异,这里是6.
现在我将回到merege这些数组并再次找到第一个块的最小值和第二个块的最大值之间的差异,并继续这样做直到结束.
我无法在我的代码中实现这一点.任何人都可以为此提供伪代码吗?
我有这两种结构: - 1.
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
Run Code Online (Sandbox Code Playgroud)
这个结构有匿名联合,当我计算这个结构的大小时 - 它出来是12个字节(4 + 4 + 4).这可以.
2.
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union u
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
Run Code Online (Sandbox Code Playgroud)
但我在32位机器上的DevC++编译器为这个结构的大小打印了8个字节.我不明白为什么它会出现8.
这是我的代码:
#include<iostream>
#include<boost/shared_ptr.hpp>
using namespace std;
void func()
{
cout<<" func # "<<endl;
throw;
}
int main()
{
try
{
int x = -1;
cout<<" point 1 "<<endl;
func();
cout<<" point 2 "<<endl;
}
catch (exception& e)
{
cout<<" exception caught "<<endl;
//throw;
}
cout<<" point 3 "<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,它给出了这个结果
point 1
func #
terminate called after throwing an instance of in
Abort
Run Code Online (Sandbox Code Playgroud)
但我期待这个:
point 1
func #
exception caught
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
为什么终止被这样调用?
而且,如果我也从catch块中抛出怎么办?
我对粘贴的代码有疑问.我为int分配了内存并删除了(像往常一样).但在某处,我看到这个sysntax(第1行)分配了一个匿名的int空间.如何释放这个空间,这不是内存泄漏的结果吗?
main(){
int *p = new int;
new int;
if(p)
delete p;
system("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud) class one
{
public:
int a;
one& fun1()
{
cout<<" Fun1 \n";
}
one& fun2()
{
cout<<" Fun2 \n";
}
};
Run Code Online (Sandbox Code Playgroud)
在主要我执行"object.fun1().fun2()" - 它工作正常.虽然我的困惑是,在函数定义中我没有返回任何东西,看起来它正在返回这个指针,这不应该是一个错误吗?