我有一个由std :: find()生成的stl迭代器,并希望测试它是否是最后一个元素.写这个的一种方法如下:
mine *match = someValue;
vector<mine *> Mine(someContent);
vector<mine *>::iterator itr = std::find(Mine.begin(), Mine.end(), match);
if (itr == --Mine.end()) {
doSomething;
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,递减end()迭代器是在寻求麻烦,例如如果向量没有元素,那么它将是未定义的.即使我知道它永远不会是空的,它仍然看起来很难看.我想也许rbegin()是可行的方法,但我不确定将前向迭代器与反向迭代器进行比较的最佳方法.
如果在我的代码中我有以下代码段:
try {
doSomething();
} catch (...) {
doSomethingElse();
throw;
}
Run Code Online (Sandbox Code Playgroud)
抛出会重新抛出默认省略号处理程序捕获的特定异常吗?
我想在GNUmake文件运行期间将当前目录放入make变量中.
这样做的语法是什么?像这样的东西?
DIR := $(PWD)
Run Code Online (Sandbox Code Playgroud) 什么相当于FreeBSD v8.1上的Linux'免费'命令?
我从我的应用程序中调用"免费"并在我的应用程序的日志文件中报告结果.移植到FreeBSD v8.1时会有什么替代品?
以下是Linux上的"免费"示例:
[centos4x32 ~] free
total used free shared buffers cached
Mem: 774452 733044 41408 0 98040 328880
-/+ buffers/cache: 306124 468328
Swap: 2031608 224 2031384
Run Code Online (Sandbox Code Playgroud) 可能重复:
exit()或异常会阻止调用范围结构析构函数吗?
在C++中,当应用程序调用exit(3)时,堆栈上的析构函数应该运行以展开堆栈吗?
我遇到了一个gcc v3.4.4的错误,并且在我的代码中添加#ifdef来解决该版本编译器的bug.
什么是GCC编译器预处理器预定义宏来检测编译器的版本号?
在gdb中,我有一个finish命令可以轻松地完成一个函数框的执行,通常在调试器中遍历代码时,在查看循环的几次迭代之后,我想完成循环并继续在它之后行走.目前,我通过在循环后的第一行设置断点来实现这一点continue,但是,如果有一个简单的gdb命令具有相同的效果但不需要设置断点,那么它将非常方便.后来清理了.
无论如何在gdb中完成正在执行的当前循环的执行?
是否有一个很好的简单的方法,以取代所有出现"/"在std::string与"\/"逃脱的所有斜线std::string?
我想建立std::string一个std::vector<std::string>.
我可以使用std::stringsteam,但想象有一个更短的方式:
std::string string_from_vector(const std::vector<std::string> &pieces) {
std::stringstream ss;
for(std::vector<std::string>::const_iterator itr = pieces.begin();
itr != pieces.end();
++itr) {
ss << *itr;
}
return ss.str();
}
Run Code Online (Sandbox Code Playgroud)
我怎么可能这样做?
考虑以下C++代码:
try {
throw foo(1);
} catch (foo &err) {
throw bar(2);
} catch (bar &err) {
// Will throw of bar(2) be caught here?
}
Run Code Online (Sandbox Code Playgroud)
我希望答案是否定的,因为它不在try块中,我在另一个问题中看到Java的答案是否定的,但是想确认C++也没有.是的,我可以运行一个测试程序,但是我想知道我的编译器有bug的远程情况下的行为的语言定义.
c++ ×6
exception ×2
stdstring ×2
stl ×2
debugging ×1
destructor ×1
ellipsis ×1
escaping ×1
exit ×1
flags ×1
free-command ×1
freebsd ×1
g++ ×1
gcc ×1
gdb ×1
gnu-make ×1
iterator ×1
linux ×1
loops ×1
makefile ×1
memory ×1
porting ×1
preprocessor ×1
replace ×1
rethrow ×1
stringstream ×1
throw ×1
try-catch ×1
version ×1
walkthrough ×1