两列格式的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};\n
Run 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\n
Run 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
被抛出?