小编Fra*_*ank的帖子

如何检查传递的Iterator是一个随机访问迭代器?

我有以下代码,它执行一些迭代器算术:

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)表达的作品(据我所知)仅适用于随机访问迭代器(像的那些vectordeque).如何检查传递的迭代器满足此要求的代码?

c++ iterator stl

30
推荐指数
2
解决办法
6210
查看次数

如何在std :: set中选择一个随机元素?

如何选择一个随机元素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+是不允许的.

c++ iterator set

29
推荐指数
1
解决办法
2万
查看次数

有一个温和的哈希函数教程吗?

令人尴尬的是,选择哈希函数(例如,对于散列字符串或整数集等)对我来说仍然是神奇的:在这里取一些素数,在那里使用魔法常量,做一些移位,模数和完成.

有关于创建哈希函数的漂亮,温和且平易近人的教程吗?

language-agnostic hash function

29
推荐指数
1
解决办法
1万
查看次数

我应该比const_iterators更喜欢迭代器吗?

最近有人提出 Scott Meyers的文章说:

  • 身高iterators超过const_iterators(PDF链接).

其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么?

这是我的:文章的一个要点是你不能删除或插入const_iterator,但我认为用它作为反对的论据很有趣const_iterators.我认为它的全部意义const_iterators在于你根本不修改范围,也不是通过插入或删除来替换它们的值或范围.或者我错过了什么?

c++ iterator stl const-iterator

27
推荐指数
2
解决办法
1万
查看次数

C++:如何实现任意函数调用的超时?

我不得不调用一个有时不会在给定时间内终止的库函数.有没有办法调用该函数,但如果它在n几秒钟内没有终止就中止它?

我无法修改函数,所以我不能直接将中止条件放入其中.我必须在外部为函数添加超时.

它可能是一个可能的解决方案,将其作为(提升)线程启动,然后我可以在一段时间后终止它?会有类似的东西吗?我实际上认为该函数不是线程安全的,但如果我将它作为唯一的单线程运行则无关紧要,对吧?还有其他(更好的)解决方案吗?

c++ timeout function abort

27
推荐指数
3
解决办法
2万
查看次数

如何在emacs中调用latexmk,并跳转到下一个错误

我想使用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 …

emacs latex build-process auctex latexmk

26
推荐指数
2
解决办法
6742
查看次数

模板类型的命名约定?

传统上,模板类型的名称只是一个大写字母:

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++ templates naming-conventions

24
推荐指数
2
解决办法
1万
查看次数

为什么string :: find返回size_type而不是迭代器?

在C++中,为什么string::find返回size_type而不是iterator

它会有意义,因为函数喜欢string::replacestring::insert将迭代器作为输入,所以你可以使用find一些字符并立即将返回的迭代器传递给replace等等.

另外,std::find返回一个迭代器 - 为什么std::string::find不同?

c++ iterator stl find

24
推荐指数
2
解决办法
5281
查看次数

是否有帮助组织#includes的工具?

是否有任何工具可以帮助组织#include属于.c或.h文件顶部的s?

我只是想知道因为我正在重组我的代码,将各种小函数定义/声明从一个长文件移动到不同的较小文件中.现在,每个较小的文件都需要位于#include长文件顶部的s 的子集.

只是烦人且容易出错,手动弄清楚所有#includes.虽然并非所有#include的代码都存在,但代码通常会编译.示例:文件A std::vector广泛使用但不包括vector; 但它目前包括一些不起眼的其他标题,恰好包括vector(可能通过一些递归包含).

c c++ code-organization header-files

24
推荐指数
1
解决办法
1610
查看次数

如何写一个类型特征`is_container`或`is_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.

c++ templates sfinae enable-if

23
推荐指数
5
解决办法
2万
查看次数