小编Twi*_*fty的帖子

测试两个迭代器是否来自同一个对象

给定两个相同类型的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)

作品.但是,这是没有记录的,这让我相信它不安全.

我的问题是我如何以便携方式完成上述工作?

另请注意,这是迭代器模板类的一部分.我将无法控制第二个迭代器.

c++ templates iterator

4
推荐指数
1
解决办法
1421
查看次数

什么是代码分支

什么是代码分支?我已经在不同的地方看到过它,特别是有点笨拙,但从来没有真正考虑过它?

它如何减慢程序的速度以及编码时我应该考虑什么?

我看到提到的if陈述.我真的不明白这些代码如何减慢代码速度.如果条件为真,请按照说明操作,否则跳转到另一组指令?我看到另一个提到"分支预测"的帖子,也许这就是我真正迷失的地方.有什么可以预测的?条件就在那里,它只能是真或假.

我不认为这是这个相关问题的重复.链接的线程正在讨论关于未排序数组的"分支预测".我在问什么是分支以及为什么需要预测.

c++

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

使用std :: vector的不寻常行为

我编写了一组相当复杂的类来处理迭代流(字符串,文件或内存).这些不是标准流,也不是相关的.无论如何,由于迭代这些缓冲区并根据缓冲区执行操作,我希望能够在调试器中看到当前的缓冲区位置.因此,仅出于调试原因,我将整个流复制到向量并保持指向此向量中位置的指针.

以下代码的作用类似于前向迭代器.我需要能够存储一个位置,然后使用它或更新它.请注意,此代码仅用于复制问题.

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)

c++ xml stl vector visual-studio-2010

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

作曲家和第三方错误

在开发Symfony2项目时,我经常遇到第三方捆绑包中的错误.大多数情况下,这些错误很微妙但很难找到.例如,仅在本周,我就发现了三个错误,其中使用简单的if ( $value )构造测试了一个值,但需要使用( $value !== null)( $value !== false ).

如果没有对相关项目的相关github页面拥有足够的权限,我能做的最好就是推送拉取请求.合并请求通常需要相当长的时间.同时,特别是在使用主版本时,其他拉取请求被合并,这反过来导致作曲家更新.发生这种情况时,任何本地错误修复都将恢复为原始代码.

有没有办法处理这种情况?

理想情况下,我希望第三方软件包更新,但我的修改仍然存在.直到牵引请求合并为止.

php git symfony composer-php

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

测试模板参数是否相等

假设我有一个模板类定义为:

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相同,则类中的大多数代码将变为冗余.

c++ templates

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

while循环排除条件

我正在增加一个指针并在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'或'开始发挥作用并且永远是真的.

怎么会这样做?

c c++

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

如何在数组中找到第一个空闲键

我们都知道数组实际上是PHP中的有序树.鉴于此,数组索引(整数键)不需要任何严格的顺序,甚至根本不存在.所以,给定一个像这样的数组:

array( 1 => 'A', 5 => 'B', 2 => 'C', 3 => 'D', 6 => 'E', 0 => 'F' )
Run Code Online (Sandbox Code Playgroud)

如何在不重新索引数组的情况下确定第一个空键的最低(非负)整数?在这种情况下,它会4.

php arrays

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

PHP 从字符串中删除终端代码

在处理用 创build 的进程的输入/输出时proc_open,我遇到了特殊的终端 ANSI 代码 ( \033[0J, \033[13G),除了找不到这些特定代码正在做什么的参考之外,它们真的干扰了我的preg_match调用。

PHP 是否有内置的方法来清理这些类型的字符串?或者与 一起使用的正确表达式是preg_replace什么?请注意,我正在处理非 ascii 字符,因此剥离除...之外的所有内容都行不通。

php regex string

0
推荐指数
1
解决办法
1786
查看次数

标签 统计

c++ ×5

php ×3

templates ×2

arrays ×1

c ×1

composer-php ×1

git ×1

iterator ×1

regex ×1

stl ×1

string ×1

symfony ×1

vector ×1

visual-studio-2010 ×1

xml ×1