AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-20276285

Slava's questions

Martin Hope
IRP_HANDLER
Asked: 2024-11-27 05:00:46 +0800 CST

Cacau - Bloco implicitamente retém 'self' - Soluções diferentes

  • 6

Então eu tenho esse trecho aqui que envolve um bloco:

NSArray<Class> *acceptableClasses = @[[DesktopEntity class]];
    __block NSInteger insertIdx = row;
    
    
    [info enumerateDraggingItemsWithOptions:0 forView:_tableView classes:acceptableClasses searchOptions:nil usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop)
     {
        
        
        DesktopEntity *entity = draggingItem.item;
        
       
        [_tableContents insertObject:entity atIndex: insertIdx];
        [_tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:insertIdx] withAnimation:NSTableViewAnimationEffectGap];
        
    
        draggingItem.draggingFrame = [_tableView frameOfCellAtColumn:0 row: insertIdx];
        ++insertIdx;
    }];

compila bem, mas estou recebendo um aviso:

O bloco retém implicitamente 'self'; menciona explicitamente 'self' para indicar que este é o comportamento pretendido

Estou com alguma dificuldade para entender o que isso significa . Consegui fazer o aviso desaparecer apenas digitando a palavra-chave self antes das variáveis:

[self.tableContents insertObject:entity atIndex: insertIdx];
[self.tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:insertIdx] withAnimation:NSTableViewAnimationEffectGap];


draggingItem.draggingFrame = [self.tableView frameOfCellAtColumn:0 row: insertIdx];
++insertIdx;

Mas também vi pessoas usando construções como

__weak typeof(self) weakSelf = self;

e então usar esse 'weakSelf' em vez disso, qual é a diferença aqui e minha primeira abordagem está errada?

objective-c
  • 1 respostas
  • 14 Views
Martin Hope
IRP_HANDLER
Asked: 2024-05-04 01:00:53 +0800 CST

Extraindo opcodes das instruções arm64 (ARMv8.5-A)

  • 5

Preciso criar alguns curingas para corresponder a certas instruções.

Por exemplo, em x86, para corresponder à maioria das instruções CALL, o seguinte padrão será suficiente:

E8 ?? ?? ?? ??

onde E8 é o opcode e os 4 bytes seguintes são o endereço relativo para o qual saltar.

Mas os opcodes para arm64, especificamente o conjunto de instruções A64, parecem ser muito mais confusos, tipo, eu tenho estas duas instruções:

0A696938               ldrb       w10, [x8, x9] ; 
EB834039               ldrb       w11, [sp, #0xc0 + var_A0]

Não há nenhuma relação óbvia se você apenas olhar as codificações 0A696938 e EB834039 . Como obtenho o opcode desta instrução ldrb para criar um padrão como o do x86?

Parece que os opcodes não ocupam um byte inteiro como no x86

x86
  • 1 respostas
  • 43 Views
Martin Hope
IRP_HANDLER
Asked: 2024-02-08 00:01:12 +0800 CST

Não é possível adicionar uma coluna ao controle CListViewCtrl - WTL

  • 4

Eu tenho uma janela básica baseada em diálogo herdada de CDialogImpl em WTL:

class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
    enum { IDD = IDD_MAINDLG };
    
    BEGIN_MSG_MAP_EX(CMainDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
        COMMAND_ID_HANDLER(IDOK, OnOK)
        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    END_MSG_MAP()

    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);


protected:
    CListViewCtrl wndList1;

}

Ao inicializar a caixa de diálogo no OnInitDialog, tento preencher esta visualização de lista que criei no editor de recursos e a nomeei IDC_LIST :

LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
    // center the dialog on the screen
    CenterWindow();

    // attach via CWindow ( CListViewCtrl )
    //HWND hwndList = GetDlgItem( IDC_LIST );
    wndList1.Attach( GetDlgItem( IDC_LIST ) );
    
    wndList1.InsertColumn( 0,  "Column1" , LVCFMT_LEFT, 120, 0 );


    return TRUE;
}

Mas mesmo após a chamada para InsertColumn não vejo nenhuma coluna, tentei outras sobrecargas para esta função que exigem a criação de um LVCOLUMNA , mas também não funcionou. Por que isso está acontecendo?

c++
  • 1 respostas
  • 54 Views
Martin Hope
IRP_HANDLER
Asked: 2024-01-10 02:24:00 +0800 CST

Complexidade de std::inplace_merge

  • 5

Portanto, tenho dois vetores classificados e queria mesclá-los em um único vetor classificado sem usar um vetor adicional.

Como existe essa condição, não posso usar std::merge , então tentei std::inplace_merge .

Eu tenho esta função que leva ambos os vetores e dois números m e n que são o número de elementos em cada vetor. Veja como resolvi esse problema:

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 
    {
         auto it = std::remove_if(std::execution::par, nums1.begin() + m, nums1.end(), 
             [](const int val)
             {
                 return val == 0;
             }
         );
         nums1.erase(it, nums1.end());

        nums1.insert(nums1.end(), nums2.begin(), nums2.end());
        std::inplace_merge(std::execution::par, nums1.begin(), nums1.begin() + nums1.size() - nums2.size(), nums1.end());
    }

Caso de exemplo

vec 1 = [1,2,3,0,0,0]
m = 3
vec2 = [2,5,6]
n = 3

Resultado esperado:[1, 2, 2, 3, 5, 6]

Minha tentativa de encontrar a complexidade do espaço e do tempo

tudo está funcionando bem, agora o que eu quero é descobrir a complexidade do tempo e do espaço. Eu descobri o seguinte:

A complexidade do espaço seria o tamanho do vetor total, certo? Neste caso acredito que seja O(m + n)

Quanto à complexidade do tempo, std::remove_if levaria no máximo m , então std::vector::erase e std::vector::insert levaria n (o número de elementos no segundo vetor) e finalmente std: :inplace_merge levaria O (n log n).

Então no final temos O(n log n + 2m + n) , estou correto?

c++
  • 1 respostas
  • 54 Views
Martin Hope
IRP_HANDLER
Asked: 2023-11-08 13:04:25 +0800 CST

x86 - mudando de 32 bits para 64 bits via RETF

  • 5

Eu estava olhando algumas técnicas anti-desmontagem e me deparei com o seguinte trecho

push 0x33
call $+5
add [esp+0x10+var_10], 5
retf
next instruction here

Resumindo, isso pularia imediatamente para a instrução logo após o RETF, mas atrapalharia os desmontadores de 32 bits. Ainda não está claro para mim por que isso acontece

Agora, me disseram que o RETF retorna para um segmento de 64 bits e, portanto, depurar isso em um depurador de 32 bits produziu a desmontagem errada. Ao executar este trecho em um depurador de 64 bits (no meu caso, windbg), ele produz o resultado correto.

Minha pergunta aqui é: há algo especial no push 0x33? 0x33 é algum tipo de valor especial?

assembly
  • 1 respostas
  • 23 Views
Martin Hope
Slava
Asked: 2023-09-07 00:40:40 +0800 CST

Por que preciso de um const lambda ao chamar std::partition

  • 6

Eu tenho esta função que usa std::partition para dividir um contêiner em dois com base em um predicado.

template<class Container, class Predicate>
void split_partition(Container& src, Container& dest, Predicate p)
{

    auto ends = std::partition_copy(
        std::make_move_iterator( src.begin() ), std::make_move_iterator( src.end() ),
        src.begin(), std::back_inserter(dest), p
    ); 

    src.erase(ends.first, src.end());

}

Eu tentei ligar com

split_partition(a, b, [](auto& t) {return t.i > 4; });

mas nem compilou, agora se usar const funciona.

split_partition(a, b, [](const auto& t) {return t.i > 4; });

Por que é que?

Editar:

std::vector<Thing> a = { {0, "foo"}, {1, "bar"}, {5, "what"}, {8, "yo"}, {2, ""} };
std::vector<Thing> b;
c++
  • 1 respostas
  • 51 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve