小编use*_*186的帖子

Qt - 使用几种类型的空格作为分隔符来拆分QString

我正在寻找拆分QString.QString中有几个单词,由以下符号中的一个或多个(!)分隔:

  • 空白
  • 标签
  • CR
  • 如果

我只想提取单词.基本上,我试图复制Python str.split()函数的行为.

我知道我可以使用正则表达式来实现这一点,但它会是什么样子?任何其他直接实现这一目标的方法也是受欢迎的.

c++ regex qstring qt split

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

Django,DRF - 返回布尔值中的用户权限列表

我想在 Django/DRF 中实现以下目标:

实现一个端点,根据给定的用户 ID,返回其权限列表。(我的意思是模型UserPermission来自django.contrib.auth.models)。

现在,这非常简单,我可以使用下面的代码来获取这些内容:

class UserPermissions(RetrieveUpdateDestroyAPIView):
    serializer_class = PermissionSerializer

    def get(self, request, pk):
        permissions = User.objects.get(pk=pk).get_all_permissions()
        print User.objects.get(pk=pk).user_permissions
        data = {
            'permissions': permissions
        }
        serializer = PermissionSerializer(data)

        return Response(serializer.data, status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

这是我得到的回应:

{
    "permissions": [
        "auth.add_user",
        "auth.add_group",
        "auth.add_userproxy",
        "auth.change_group",
        "auth.change_user",
        "auth.delete_permission",
        "evidence.view_all_customers"
    ]
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不完全是我想要的。我想返回系统中所有权限的列表,其中包含给定用户的每个单独权限的真/假值。

当然,我尝试获取完整的权限列表,将它们与用户的权限进行比较,但这就是我偶然发现一个问题的地方:

Permission我可以从中django.contrib.auth.models获取系统中完整的权限列表的模型具有以下属性:

namecontent_typecodename。我发现这codename是我需要的属性,但有一个问题 - 它包含没有前置应用程序名称的名称(例如,只是“add_user”,而不是User.get_all_permissions().

这基本上使得两者没有可比性。有没有办法很好地做到这一点?我只想将子字符串匹配作为最后的手段,因为我认为这不是一个好的做法。

编辑:根据要求,这是一个示例:

假设系统中有以下权限:

"auth.add_user",
"auth.add_group",
"auth.add_userproxy",
"auth.change_group",
"auth.change_user",
"auth.delete_permission",
"evidence.view_all_customers"
"contenttypes.add_contenttype", …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

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

C++,Qt - 尽可能快地拆分QByteArray

我正在尝试将QByteArray包含UTF-8编码纯文本(使用空格作为分隔符)的大量文本拆分为最佳性能.我发现如果我将数组转换为QString第一个,我可以获得更好的结果.我尝试使用正则QString.split表达式使用该函数,但性能非常糟糕.这段代码变得更快:

QMutex mutex;
QSet<QString> split(QByteArray body)
{
    QSet<QString>  slova;

    QString s_body = QTextCodec::codecForMib(106)->toUnicode(body);
    QString current;

    for(int i = 0; i< body.size(); i++){
        if(s_body[i] == '\r' || s_body[i] == '\n' || s_body[i] == '\t' || s_body[i] == ' '){

            mutex.lock();
            slova.insert(current);

            mutex.unlock();
            current.clear();
            current.reserve(40);
        } else {
            current.push_back(s_body[i]);
        }
    }
    return slova;
}
Run Code Online (Sandbox Code Playgroud)

"Slova" QSet<QString>目前是,但我可以使用std::set或任何其他格式.此代码应该可以找到阵列中有多少个唯一的单词,并且可以获得最佳性能.

不幸的是,这段代码远远不够快.我希望从中挤出绝对最大值.

使用callgrind,我发现最贪婪的内部函数是:

QString::reallocData (18% absolute cost)
QString::append (10% absolute cost)
QString::operator= (8 % absolute cost)
QTextCodec::toUnicode (8% …
Run Code Online (Sandbox Code Playgroud)

c++ performance qt split qbytearray

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

Java JPA,使用实体管理器设置事务隔离级别

我正在尝试为与给定实体管理器(TRANSACTION_SERIALIZABLE等)关联的连接设置事务隔离级别。

我在互联网上搜索了解决方案并找到了一些。然而,它们似乎都不起作用。

当我尝试执行以下操作时:

EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU");
public EntityManager em = emfactory.createEntityManager();

java.sql.Connection connection = (java.sql.Connection) em.getDelegate();               
connection.setTransactionIsolation(TRANSACTION_SERIALIZABLE);
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Exception in thread "main" java.lang.ClassCastException: 
org.eclipse.persistence.internal.jpa.EntityManagerImpl cannot be cast to java.sql.Connection
Run Code Online (Sandbox Code Playgroud)

当我做

EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU");
public EntityManager em = emfactory.createEntityManager();

java.sql.Connection connection = em.unwrap(java.sql.Connection.class);
Run Code Online (Sandbox Code Playgroud)

connection存储的值为null

为了了解更多信息,我运行了以下命令:

Object obj = em.getDelegate();
Run Code Online (Sandbox Code Playgroud)

存储的类类型objorg.eclipse.persistence.internal.jpa.EntityManagerImpl

编辑:(哎呀,我想我可以从例外中看出这一点)

编辑2:

我已经通过调用以下命令成功获得了会话(我认为):

 Session session = ((EntityManagerImpl) em).getSession();
Run Code Online (Sandbox Code Playgroud)

然而,其中既没有connection(),也DoWork()没有方法。

知道如何跟进并设置事务隔离级别吗?

java jpa transactions

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

Linux - 移动控制台光标可视化

我目前正在为linux设计CLI界面,由于各种原因,我无法使用ncurses.我只使用C++和Qt框架.

因此,为了拥有一个用户友好的界面,我必须在一个单独的线程中运行这个getch循环:

/sf/answers/63895751/

这基本上意味着我必须自己实现所有基本功能(例如退格).我已经实现了命令完成和命令历史记录(比如当你在linux中按tab或uparrow/downarrow时),但我无法弄清楚如何实现leftarrow/rightarrow(也就是通过typeahead寻找).

通常情况下,我这样实现:在每个不等于-1的gech上,我检查用户是否按下了一个特殊的键(一个以某种方式修改了typeahead的键).然后我使用以下函数清除stdout:

void inputobject::clear_line(int nletters)
{
    QTextStream(stdout) << "\033[2K";

    for(int i = 0; i < nletters;i++){
        QTextStream(stdout) << "\b";
    }

    rewind(stdout);
}
Run Code Online (Sandbox Code Playgroud)

并用其他东西替换它,有效地模拟typeahead.例如,在退格的情况下,我会保存命令调用clear_line,并再次打印命令,只需少一个字母,行为与普通控制台应用程序完全相同.

我真正的问题是光标,在左/右箭头的情况下,我需要移动光标可视化,以便能够指示文本在用户寻找的位置:在此输入图像描述

由于我如何重写给定的stdout线以模拟typeahead的性质,光标REALLY的位置并不重要,只要它保持在同一条线上 - 它只是重要的视觉效果.如何在linux上实现移动光标可视化?

c++ linux qt command-line-interface termios

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

Linux中的进程之间如何共享代码段?

我已经阅读了关于在 Linux 中分叉新进程时发生的写时复制原则。

我还了解到,如果一个程序的多个实例同时运行,则只能在内存中找到该程序代码的一个实例。

我想知道这是否是写时复制原则的直接后果,如果不是,确保程序代码的不必要副本不会驻留在内存中的过程是什么?

linux memory fork copy-on-write

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

结构与对象属性的交互和c ++中的std :: vector

我遇到了这个问题,我想知道它的原因是什么.

我的代码如下:

struct node{
  bool leaf;
  std::string label;
};

//in main
std::vector<node> graph;
graph.reserve(5);
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试分配 graph[3].leaf = true;,一切都会成功.

但是,如果我尝试对对象类型执行相同操作,例如 graphA[i].label = "01";,我会遇到分段错误.

如果我将代码更改为

struct node{
  bool leaf;
  std::string * label;
};
Run Code Online (Sandbox Code Playgroud)

node在向量的每个实例中为字符串分配内存,我现在可以graphA[i]->label毫无问题地分配值.

为什么是这样?任何回复将不胜感激.

c++ vector segmentation-fault

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

寻找提供随机和"顺序"访问的数据结构

这是我经常遇到的编程问题,并且想知道是否存在数据结构,无论是在C++ STL中还是我自己实现的,都提供随机和顺序访问.

我可能需要这个的一个例子:

  • 假设有n种类型的项目(例如,n = 1000000),并且每种类型的项目都有固定数量(例如,0或10)

  • 我将这些项存储到一个数组中,其中数组索引表示项的类型,值表示该给定类型的项数是多少

  • 现在,我有一个迭代所有现有项目的算法.为了获得这些项目,当所有条目都为0时迭代整个数组是非常浪费的,除了数组[99999]和数组[999999].

通常,我通过使用链表来解决这个问题,该链表保存了所有非零数组条目的索引.我以这种方式实现标准操作:

Insert(int t):

1)如果Array [t] == 0,LinkedList.push_back(t);

2)数组[t] ++;

删除(int t):

1)如果Array [t] == 1,从LinkedList中查找并删除t;

2)数组[t] - ;

如果我想要删除操作的O(1)复杂性,我使数组存储容器而不是整数.每个容器都包含一个整数和指向LinkedList各自元素的指针,因此我不必搜索列表.

我想知道是否有一个数据结构正式化/改进了这种方法,或者是否有一种更好的方法来完成这项工作.

c++ stl data-structures

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