给定两个相同类型的std :: iterators,如何测试来自同一个对象(不是类)?请注意,我不是在问如何比较它们的值.
std::string foo = "foo";
std::string bar = "bar";
std::string::iterator iter1 = foo.begin();
std::string::iterator iter2 = bar.begin();
if ( iter1 == iter2 )
{
...
}
Run Code Online (Sandbox Code Playgroud)
以上应该而且确实失败了.我怎样才能在运行时检查这个?查看源代码,我看到调用的相关方法iterator::_Compat()是一个void方法,它执行我想要的检查但是在失败时它会发出调试断言.它将在发布版本中被忽视.
进一步看,我看到迭代器(至少对于字符串)有一个公共_GetCont()方法.所以
if ( iter1._GetCont() == iter2._GetCont() )
Run Code Online (Sandbox Code Playgroud)
作品.但是,这是没有记录的,这让我相信它不安全.
我的问题是我如何以便携方式完成上述工作?
另请注意,这是迭代器模板类的一部分.我将无法控制第二个迭代器.
什么是代码分支?我已经在不同的地方看到过它,特别是有点笨拙,但从来没有真正考虑过它?
它如何减慢程序的速度以及编码时我应该考虑什么?
我看到提到的if陈述.我真的不明白这些代码如何减慢代码速度.如果条件为真,请按照说明操作,否则跳转到另一组指令?我看到另一个提到"分支预测"的帖子,也许这就是我真正迷失的地方.有什么可以预测的?条件就在那里,它只能是真或假.
我不认为这是这个相关问题的重复.链接的线程正在讨论关于未排序数组的"分支预测".我在问什么是分支以及为什么需要预测.
我编写了一组相当复杂的类来处理迭代流(字符串,文件或内存).这些不是标准流,也不是相关的.无论如何,由于迭代这些缓冲区并根据缓冲区执行操作,我希望能够在调试器中看到当前的缓冲区位置.因此,仅出于调试原因,我将整个流复制到向量并保持指向此向量中位置的指针.
以下代码的作用类似于前向迭代器.我需要能够存储一个位置,然后使用它或更新它.请注意,此代码仅用于复制问题.
class foo
{
public:
foo ( std::string szTemp )
: nOffset( 0 )
{
vec.resize( szTemp.size() );
std::memcpy( &vec[ 0 ], szTemp.c_str(), szTemp.size() );
pChar = &vec[ 0 ];
}
foo( const foo & Other )
: vec( Other.vec )
, nOffset( Other.nOffset )
{
pChar = &vec[ nOffset ];
}
void Inc ( void )
{
++nOffset;
pChar = &vec[ nOffset ];
}
size_t nOffset;
char * pChar;
std::vector< char > vec;
};
int _tmain ( int …Run Code Online (Sandbox Code Playgroud) 在开发Symfony2项目时,我经常遇到第三方捆绑包中的错误.大多数情况下,这些错误很微妙但很难找到.例如,仅在本周,我就发现了三个错误,其中使用简单的if ( $value )构造测试了一个值,但需要使用( $value !== null)或( $value !== false ).
如果没有对相关项目的相关github页面拥有足够的权限,我能做的最好就是推送拉取请求.合并请求通常需要相当长的时间.同时,特别是在使用主版本时,其他拉取请求被合并,这反过来导致作曲家更新.发生这种情况时,任何本地错误修复都将恢复为原始代码.
有没有办法处理这种情况?
理想情况下,我希望第三方软件包更新,但我的修改仍然存在.直到牵引请求合并为止.
假设我有一个模板类定义为:
template < typename A, typename B >
class something { ... }
Run Code Online (Sandbox Code Playgroud)
如何测试类型A和B是否属于同一类型?我知道这可以在运行时使用typeid完成,但我真的需要这个是编译时测试.
另外,如果类型A和B相等,我该如何专门化该类?
在现实世界中,A将是某种类型的stl容器,例如std :: string,而B将是char或wchar_t.在内部我已经检查了容器value_type(如果不是预期的话,编译错误).如果B与容器value_type相同,则类中的大多数代码将变为冗余.
我正在增加一个指针并在while循环中减少一个计数器.我想在计数器达到零或指针等于最大点(IF存在)时退出循环.如果部分给我的问题.
考虑以下:
char * pIt = utf8str;
char ** pEnd = 0;
size_t nVal = 10;
while ( 0 < nVal && (pEnd && pIt < *pEnd || true) )
{
--nVal;
++pIt;
}
Run Code Online (Sandbox Code Playgroud)
如果pEnd为null,我希望它从比较中排除,因此pIt没有上限.显然上面的代码不起作用,因为当pIt >= pEnd'或'开始发挥作用并且永远是真的.
怎么会这样做?
我们都知道数组实际上是PHP中的有序树.鉴于此,数组索引(整数键)不需要任何严格的顺序,甚至根本不存在.所以,给定一个像这样的数组:
array( 1 => 'A', 5 => 'B', 2 => 'C', 3 => 'D', 6 => 'E', 0 => 'F' )
Run Code Online (Sandbox Code Playgroud)
如何在不重新索引数组的情况下确定第一个空键的最低(非负)整数?在这种情况下,它会4.
在处理用 创build 的进程的输入/输出时proc_open,我遇到了特殊的终端 ANSI 代码 ( \033[0J, \033[13G),除了找不到这些特定代码正在做什么的参考之外,它们真的干扰了我的preg_match调用。
PHP 是否有内置的方法来清理这些类型的字符串?或者与 一起使用的正确表达式是preg_replace什么?请注意,我正在处理非 ascii 字符,因此剥离除...之外的所有内容都行不通。