两列格式的IEEE会议出版物要求作者手动均衡最终提交的最后一页上的列的长度.我通常通过插入\newpage必要的地方来完成此操作- 这通常最终会出现在我(手动输入)的引用中.
但是,我最近开始使用BibTeX来管理引用,现在遇到了一个问题:我的最后一页只包含一些(生成的)引用,我无法弄清楚如何手动均衡列.
最后一页是生成的尾部:
\bibliographystyle{IEEEtran}
\bibliography{IEEEabrv,library}
Run Code Online (Sandbox Code Playgroud)
关于如何在继续使用BibTeX的同时平衡列的任何想法?
我有一个叫做类的类GraphEdge,我希望set通过它tail和head成员在一个集合(内置类型)中进行唯一定义__init__.
如果我没有定义__hash__,我会看到以下行为:
>>> E = GraphEdge('A', 'B')
>>> H = GraphEdge('A', 'B')
>>> hash(E)
139731804758160
>>> hash(H)
139731804760784
>>> S = set()
>>> S.add(E)
>>> S.add(H)
>>> S
set([('A', 'B'), ('A', 'B')])
Run Code Online (Sandbox Code Playgroud)
该组没有办法知道,E并且H是由我的定义是相同的,因为他们有不同的哈希值(这是什么类型的集合用来确定唯一性,据我所知),所以它增加了两种截然不同的元素.所以我定义了一个相当天真的哈希函数,GraphEdge如下所示:
def __hash__( self ):
return hash( self.tail ) ^ hash( self.head )
Run Code Online (Sandbox Code Playgroud)
现在上面按预期工作:
>>> E = GraphEdge('A', 'B')
>>> H = GraphEdge('A', 'B')
>>> hash(E)
409150083
>>> hash(H)
409150083 …Run Code Online (Sandbox Code Playgroud) 请考虑以下简单示例类,该类具有在调用时公开某些内部数据的修改版本的属性:
class Foo(object):
def __init__(self, value, offset=0):
self._value = value
self.offset = offset
@property
def value(self):
return self._value + self.offset
@value.setter
def value(self, value):
self._value = value
这些value.setter工作适用于常规任务,但当然会因复合分配而中断:
>>> x = Foo(3, 2) >>> x.value 5 >>> x.value = 2 >>> x.value 4 >>> x.value += 5 >>> x.value 11
期望的行为x.value += 5应该等同于x.value = x._value + 5,而不是x.value = x.value + 5.有没有办法实现这个(使用属性接口)纯粹在Foo类中?
给出以下基于共享指针容器的类,
\n\nclass Foo;\n\nclass Bar {\npublic:\n // ...\n const std::vector<boost::shared_ptr<const Foo> >& getFoos() const { return foos_; }\nprivate:\n std::vector<boost::shared_ptr<Foo> > foos_;\n};\nRun Code Online (Sandbox Code Playgroud)\n\n这不会编译,因为
\n\ninvalid initialization of reference of type \xe2\x80\x98const std::vector<boost::shared_ptr<const Foo>, std::allocator<boost::shared_ptr<const Foo> > >&\xe2\x80\x99 from expression of type \xe2\x80\x98const std::vector<boost::shared_ptr<Foo>, std::allocator<boost::shared_ptr<Foo> > >\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n该foos_成员需要指向可变Foo对象以供Bar对象内部使用,但我不希望客户端代码调用getFoos()能够修改任何内容。
const从返回类型Foo中删除限定符getFoos()可以解决此问题。但是,我知道虽然std::vector将其常量传播到其元素,但boost::shared_ptr对其指向的对象(自然)没有这样做。因此,在我看来,似乎getFoos()不再观察它的const限定符(即使编译器没有抱怨),因为客户端代码可以修改Foo返回的共享指针指向的对象。
我对么?如果是这样,是否有某种方法可以编写getFoos(),以便它返回 const 对象的 const …
后std::vector::resize()抛出一个std::bad_alloc异常,是原始数据仍然有效和可访问的std::vector对象?
答案是否适用于其他分配器,例如if boost::interprocess::allocator是否用作分配器,并且boost::interprocess::bad_alloc被抛出?