我有以下代码,它执行一些迭代器算术:
template<class Iterator>
void Foo(Iterator first, Iterator last) {
typedef typename Iterator::value_type Value;
std::vector<Value> vec;
vec.resize(last - first);
// ...
}
Run Code Online (Sandbox Code Playgroud)
该(last - first)表达的作品(据我所知)仅适用于随机访问迭代器(像的那些vector和deque).如何检查传递的迭代器满足此要求的代码?
如何选择一个随机元素std::set?
我天真地试过这个:
int GetSample(const std::set<int>& s) {
double r = rand() % s.size();
return *(s.begin() + r); // compile error
}
Run Code Online (Sandbox Code Playgroud)
但这operator+是不允许的.
令人尴尬的是,选择哈希函数(例如,对于散列字符串或整数集等)对我来说仍然是神奇的:在这里取一些素数,在那里使用魔法常量,做一些移位,模数和完成.
有关于创建哈希函数的漂亮,温和且平易近人的教程吗?
我不得不调用一个有时不会在给定时间内终止的库函数.有没有办法调用该函数,但如果它在n几秒钟内没有终止就中止它?
我无法修改函数,所以我不能直接将中止条件放入其中.我必须在外部为函数添加超时.
它可能是一个可能的解决方案,将其作为(提升)线程启动,然后我可以在一段时间后终止它?会有类似的东西吗?我实际上认为该函数不是线程安全的,但如果我将它作为唯一的单线程运行则无关紧要,对吧?还有其他(更好的)解决方案吗?
我想使用latexmk在Emacs中编译我的LaTeX文档.特别是我需要Emacs功能next-error,通常使用Cx`调用,并跳转到文档中的下一个LaTeX错误.
我想打电话latexmk或使用C-x compileAUCTeX C-c C-c.
首先,我开始latexmk使用
$pdflatex = 'pdflatex -interaction=nonstopmode';
Run Code Online (Sandbox Code Playgroud)
选项1:Cx编译
我按下C-x compile并键入latexmk -pdf foo,运行pdflatex.但是next-error,即使*compilation*缓冲区包含错误,也不会跳转到错误:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Run Code Online (Sandbox Code Playgroud)
如何在第48行自动跳转到此错误?
请注意,解析乳胶输出的这个问题与latexmk直接无关.我刚才也会出现同样的问题C-x compile pdflatex -interaction=nonstopmode foo.
选项2:AUCTeX
如何设置AUCTeX latexmk -pdf而不是pdflatex我的.tex文件?当然,我也想next-error在这里工作.
更新:我开始获得赏金,因为如果这有效,对许多人来说这将是一个很好的工具.我认为如果给出一个解决方案可以让我latexmk在Emacs中轻松编译我的LaTeX文档并使用跳转到错误next-error …
传统上,模板类型的名称只是一个大写字母:
template<class A, class B, class C>
class Foo {};
Run Code Online (Sandbox Code Playgroud)
但我犹豫不决,因为它是非描述性的,因此难以阅读.所以,这样的事情会不会更好:
template<class AtomT, class BioT, class ChemT>
class Foo {};
Run Code Online (Sandbox Code Playgroud)
我也倾向于认为以下不是一个坏主意:
template<class ATOM, class BIO, class CHEM>
class Foo {};
Run Code Online (Sandbox Code Playgroud)
它使它们脱颖而出(而且,它又是大写字母).你怎么看?
在C++中,为什么string::find返回size_type而不是iterator?
它会有意义,因为函数喜欢string::replace或string::insert将迭代器作为输入,所以你可以使用find一些字符并立即将返回的迭代器传递给replace等等.
另外,std::find返回一个迭代器 - 为什么std::string::find不同?
是否有任何工具可以帮助组织#include属于.c或.h文件顶部的s?
我只是想知道因为我正在重组我的代码,将各种小函数定义/声明从一个长文件移动到不同的较小文件中.现在,每个较小的文件都需要位于#include长文件顶部的s 的子集.
只是烦人且容易出错,手动弄清楚所有#includes.虽然并非所有#include的代码都存在,但代码通常会编译.示例:文件A std::vector广泛使用但不包括vector; 但它目前包括一些不起眼的其他标题,恰好包括vector(可能通过一些递归包含).
是否可以写一个类型的特点,它的值是所有常见的STL结构真(例如vector,set,map,...)?
首先,我想编写一个类型特征,对于a vector和false 都是如此.我试过这个,但它没有编译:
template<class T, typename Enable = void>
struct is_vector {
static bool const value = false;
};
template<class T, class U>
struct is_vector<T, typename boost::enable_if<boost::is_same<T, std::vector<U> > >::type> {
static bool const value = true;
};
Run Code Online (Sandbox Code Playgroud)
错误消息是template parameters not used in partial specialization: U.