我有一个双子座:
deque<char> My_Deque;
My_Path.push_front('a');
My_Path.push_front('b');
My_Path.push_front('c');
My_Path.push_front('d');
My_Path.push_front('e');
Run Code Online (Sandbox Code Playgroud)
有这样的方法输出它.
首先:
deque<char>::iterator It;
for ( It = My_Deque.begin(); It != My_Deque.end(); It++ )
cout << *It << " ";
Run Code Online (Sandbox Code Playgroud)
第二:
for (i=0;i<My_Deque.size();i++) {
cout << My_Deque[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)
什么是访问双端队列的元素的最佳途径-通过迭代器或类似这样的:My_Deque[i]?deque <...>元素是一个指向每个元素的指针数组,用于快速访问它的数据,或者以连续的方式提供对它的随机元素的访问(如下图所示)?
我正在使用Perl Tkx创建一个简单的应用程序,并允许用户选择一个目录.而不是使用文本包装或将框拉伸到荒谬的长度来显示整个目录名称,如果名称太长,我想截断它并将"..."追加到最后.
问题是标签的宽度被定义为某个任意值(如40).如果这个值是标签可以容纳多少个字符的度量,我可以将字符串截断为37并附加"...",但似乎并非如此.
有谁知道-width使用Perl Tkx的标签实际上是什么?我怎样才能找到-width我的字符串占用的单位数量,这样我就可以找出适当的点来截断它的位置?
编辑:
我在tcl手册中找到了这个答案:
数据库类:宽度指定标签的所需宽度.如果标签中正在显示图像或位图,则该值以屏幕为单位(即Tk_GetPixels可接受的任何形式); 对于文本,它是字符.
如果未指定此选项,则标签的所需宽度将根据图像或位图或其中显示的文本的大小计算.
这应该意味着对于40的宽度来截断文本我应该只需要将字符串截断为37个字符并添加"...".
我通过用所有"M"填充标签来测试这一点.我使用字母"M",因为它通常是最宽的字符(见这里).我编写的代码截断为37"M"并在末尾添加"...",但"M"似乎在大约24"M"之后溢出标签的末尾.
这意味着假设它只是拉伸标签以适应最宽的角色40这是不安全的...因此我的问题仍然没有答案.
如何确定字符串的"宽度",以便我可以适当地截断它?
EDIT2:
我找到了一个解决方法,但它仍然不是我想要的解决方案.如果将标签上的文本更改为固定宽度字体,它将正常工作.它看起来不太好看,所以我真的很喜欢适用于非固定宽度字体的解决方案.
我在我的一个Perl脚本中遇到了一个奇怪的问题.我有一个Perl对象.在某个范围内,我希望更改其中一个对象属性,但我希望在该属性离开范围后将其恢复为旧值.
例:
my $object = Object->new('name' => 'Bob');
{
# I know this doesn't work, but it is the best way
# I can represent what I amd trying to do.
local $object->name('Lenny');
# Prints "Lenny"
print $object->name();
}
# Prints "Bob"
print $object->name();
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这样的事情?
编写Perl模块时,您可以使用POD样式文档对其进行记录.然后,要了解模块的工作原理,您只需在命令行中输入:
perldoc <module_name>
我知道Python有一种使用"docstrings"记录代码的标准形式,它有点类似于Perl的POD风格.然后可以使用该help()函数提取有关Python模块的信息,但这远非优雅.
首先,您需要启动Python解释器,然后导入您想要获得帮助的模块,最后您可以使用该help()函数获取有关模块的信息.
例:
>python
# Prints Python version info
>>>import <module_name>
>>>help(<module_name>)
# Prints documentation!
Run Code Online (Sandbox Code Playgroud)
我想要一个Python相当于Perl的工作方式:
pydoc <module_name>
但是当我尝试这个时,我得到以下输出:
'pydoc' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud) 我正在阅读" 编程Perl "并遇到一个似乎没有意义的奇怪例子.本书描述了Perl中的逗号运算符如何在标量上下文中使用时仅返回最后的结果.
例:
# After this statement, $stuff = "three"
$stuff = ("one", "two", "three");
Run Code Online (Sandbox Code Playgroud)
然后,这本书在几页之后给出了这个"反向逗号运算符"的例子(第82页)
# A "reverse comma operator".
return (pop(@foo), pop(@foo))[0];
Run Code Online (Sandbox Code Playgroud)
然而对我来说,这似乎并没有反过来......?
例:
# After this statement, $stuff = "three"
$stuff = reverse_comma("one", "two", "three");
# Implementation of the "reverse comma operator"
sub reverse_comma {
return (pop(@_), pop(@_))[0];
}
Run Code Online (Sandbox Code Playgroud)
这与正常的逗号运算符有何不同?结果是一样的,没有逆转!
我正在尝试编写一个递归正则表达式来捕获代码块,但由于某种原因它似乎没有正确捕获它们.我希望下面的代码能够捕获函数的完整主体,但它只捕获第一个if语句的内容.
它几乎就像.+?是以某种方式吞噬了第一个{,但它应该是非贪婪的,所以我不明白它为什么会这样.
是什么导致它以这种方式行事?
脚本:
use strict;
use warnings;
my $text = << "END";
int max(int x, int y)
{
if (x > y)
{
return x;
}
else
{
return y;
}
}
END
# Regular expression to capture balanced "{}" groups
my $regex = qr/
\{ # Match opening brace
(?: # Start non-capturing group
[^{}]++ # Match non-brace characters without backtracking
| # or
(?R) # Recursively match the entire expression
)* …Run Code Online (Sandbox Code Playgroud) 我在 vim 中编写了一些 Perl 代码,不小心在变量名中输入了一个单引号字符,并注意到它以与普通单引号字符串不同的颜色突出显示它。
我觉得这很奇怪,所以我写了一个小测试程序(如上所示)并尝试运行它以查看 Perl 将如何处理它,但我收到了这个错误:
"my" variable $var::with::apostrophes can't be in a package
这里到底发生了什么?是否存在变量名称中的单引号实际上有效的情况?如果是这样,单引号在这种情况下使用时有什么含义?
我正在尝试拆分一个字符串并从返回的数组中弹出一个值.我怎么能在一行中做到这一点?
my $string = 'test,string';
# Split and pop in one line
my $val = pop [split ',', $string];
print $val;
Run Code Online (Sandbox Code Playgroud)
结果应该是,'string'但我得到这个:
弹出的arg 1的类型必须是数组(不是匿名列表([]))
这是我的Perl版本信息,以防它有用:
这是为x86_64-linux-thread-multi构建的perl,v5.8.8
前几天我在我们的一个C++应用程序中遇到了一个奇怪的拼写错误,触发了代码进入无限循环.在for循环结束时i++,程序员意外地分配,而不是仅仅递增i = i++.
for (int i = 0; i < 10; i = i++) {
cout << "i = " << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
i = 0
i = 0
i = 0
...
Run Code Online (Sandbox Code Playgroud)
最奇怪的是,即使理解这是一个错字,我也看不出为什么这段代码不起作用.据我所知,分配i应该没有影响,因为i在分配后仍应增加.(出于某种原因,它必须改为复制一份?但这似乎没有意义.)
另一个有趣的事情是将赋值更改为i = ++i不会产生无限循环.
这段代码在我们之前的编译器中没有产生无限循环:gcc version 4.4.7 20120313.我们最近升级到gcc version 4.8.5 20150623现在它.
问题是为什么这个代码在逻辑上看起来不应该产生无限循环,哪个编译器根据C++标准正确解释这个?