我正在和一个人一起工作std::map<std::string, MyClass* >.
我想测试是否my_map.find(key)返回特定指针.
现在我正在做;
auto iter = my_map.find(key);
if ((iter != my_map.end()) && (iter->second == expected)) {
// Something wonderful has happened
}
Run Code Online (Sandbox Code Playgroud)
但是,operator *迭代器的位置需要返回引用.直觉我认为它是有效的并完全初始化?如果是这样,那my_map.end()->second将是NULL,并且(因为NULL从未预料到),我可以将我的if语句减少为:
if (iter->second == expected)
Run Code Online (Sandbox Code Playgroud)
这是否符合规范?有没有人有实际经验?恕我直言,代码变得更加清晰,可能会实现微小的性能提升.
我似乎无法让zlib对windows下的mingw做任何事情.
我下载了zlib @ http://sourceforge.net/projects/mingw/files_beta/MinGW/zlib/zlib-1.2.3-1-mingw32/,并将头文件和lib文件放在正确的位置.
简单的代码如:
#include <stdlib.h>
#include <stdio.h>
#include "zlib.h"
int main(int argc, char *argv[])
{
long a;
char buffer[1024];
a = 1024;
compress(buffer,&a,"testing",7);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
gcc test.c -lzlib -Wall -o test.exe
Run Code Online (Sandbox Code Playgroud)
编译好.然而,exe在压缩功能崩溃.有任何想法吗?
我想在2D平面中创建一组非退化的大量随机点云(在整个集合中没有直线3个点).我有一个天真的解决方案,它生成一个随机浮点对P_new(x,y),并检查到现在生成的每一对点(P1,P2),如果点(P1,P2,P)位于同一行或不同.这需要对添加到列表中的每个新点进行O(n ^ 2)检查,使得整个复杂度为O(n ^ 3),如果我想生成超过4000个点(超过40分钟),则非常慢.有没有更快的方法来生成这些非简并点?
我正在使用arm微处理器进行编程,并尝试通过UART使用print语句进行调试.我不想stdlibs只为调试添加.有没有办法打印到控制台没有stdio.h/ iostream.h?我可以写自己的printf()吗?
或者,我可以使用DMA控制器直接写入UART.但是,我想避免这是可能的.使用内置测试功能"echo"或"remote loop-back"我知道我已正确配置UART.
起初我是c ++的初学者,我自学它,所以请回答相当简单......
我需要编写一个包含节点的图形,每个节点都有id和边缘列表,每个边缘都有另一个节点id和距离
我正在寻找的是我应该用什么来构建这个图,因为我想使用dijkstra算法来获得最短的路径从一个点到另一个...所以搜索性能应该是我认为最重要的!
我搜索了很多,现在我很困惑
提前谢谢你的帮助
假设我们有这个代码
class A {
public:
A() : x(1) {}
virtual ~A() {}
int x;
};
class B {
public:
B() : y(2) {}
virtual ~B() {}
void g()
{
cout << "B::" << y << endl;
}
int y;
};
class C : private A, private B {
public:
void f()
{
B* p = static_cast<B*>( this );
p->g();
}
};
int main()
{
C c;
((B*)&c)->g();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
投在主函数的C风格不能在C++强制类型转换(的角度来正确表达static_cast,dynamic_cast,reinterpret_cast).但是首先允许这个的原因是什么?它不会伤害封装吗?
更新 这不是链接问题的重复,因为这个问题是关于C++中的设计决策.它没有问我能用或不能用语言做什么,它询问为什么可能做出某些决定.
我是C编程的新手,这是我的问题:
我想将每个数组的第一个值存储在一个新数组中,然后将每个数组的第二个值存储在一个新数组中,依此类推.
我可以声明指针数组,但我不知道我是如何使用它的!
我需要帮助.
int main()
{
int t1[4]={0,1,2,3};
int t2[4]={4,5,6,7};
int t3[4]={8,9,10,11};
int t4[4]={12,13,14,15};
int *tab[4]={t1,t2,t3,t4};
int i,j,k,l;
for (i=0; i<4;i++)
{
printf("%d\t", *tab[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我只存储每个数组的第一个值.
我在Visual Studio 2008中有一个很大的C++解决方案,有很多项目,可以链接到其他库.有时我想将解决方案链接到不同的库,为此我创建一个新的exe文件,我需要重新链接解决方案.
但是,只有在至少有一个项目需要重建时才能进行重新链接.所以我手动更改代码中的一行并将其更改回来......
有没有更好的方法来重做链接过程?
我用谷歌搜索,我说,我已经看到了其他的"重复",但它们都没有在Delphi 2009中更新到更新4.
就像在C#中一样,我希望在线或尽可能短地创建一个静态变量.最后它就像一个全局变量,但它的排序.
在delphi 2009中最简单的方法是什么?
编辑
我按照你的一些答案,但它不起作用.
类型:
type
TmyClass = class(TObject)
var staticVar:integer;
end;
Run Code Online (Sandbox Code Playgroud)
码:
procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
TMyClass.staticVar := 5; // Line 31
a := TMyClass.staticVar; // Line 32
MessageBox(0,IntToStr(a),'',0);
end;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[DCC Error] Unit1.pas(31): E2096 Method identifier expected
[DCC Error] Unit1.pas(32): E2096 Method identifier expected
Run Code Online (Sandbox Code Playgroud) 我试图通过以下方式将二进制数组转换为十进制:
uint8_t array[8] = {1,1,1,1,0,1,1,1} ;
int decimal = 0 ;
for(int i = 0 ; i < 8 ; i++)
decimal = (decimal << 1) + array[i] ;
Run Code Online (Sandbox Code Playgroud)
实际上我必须将64位二进制数组转换为十进制数,我必须做几百万次.
任何人都可以帮助我,有没有更快的方法来做到这一点?或者上面的那个好吗?