小编Sum*_*812的帖子

STL什么是随机访问和顺序访问?

所以我很想知道,什么是随机访问?

我搜索了一下,找不到多少.我现在的理解是,在容器中的"块"随机放置(如看到这里).随机访问意味着我可以访问容器的每个块,无论在什么位置(所以我可以在不经过所有块之前读取它在第5个位置上所说的内容),而在顺序访问时,我必须经历第1个,第2个,第3和第4到达第5街区.

我对吗?或者如果没有,那么有人可以向我解释随机访问和顺序访问是什么?

c++ stl random-access

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

图和Dijkstra无限循环?

所以我创建了一个Minecraft插件,我需要一个图形来创建一个导航系统.我研究了一下,发现我应该可以使用Dijkstra,但我有一个问题.当搜索最短路径时,我有时会得到一个无限循环(并不总是,它通常在前2-3次运行时起作用,但之后会进入循环).

当玩家想要到达目的地时,我搜索最近的顶点并使用带有该顶点的computePaths作为参数.然后,当我运行getShortestPathTo时,它有时会卡在无限循环中,并且我的内存耗尽(因为我将相同的顶点添加到列表中,因此会产生这种情况).你能明白为什么会卡住吗?据我所知,Dijkstra应该能够处理从A节点到B节点以及从B节点到A节点的权利吗?

以下是我的代码:

public class Dijkstra {
    public static void computePaths(Vertex source) {
    source.minDistance = 0.;
    PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
    vertexQueue.add(source);

    while (!vertexQueue.isEmpty()) {
        Vertex u = vertexQueue.poll();

        // Visit each edge exiting u
        for (Edge e : u.adjacencies) {
            Vertex v = e.target;
            double weight = e.weight;
            double distanceThroughU = u.minDistance + weight;
            if (distanceThroughU < v.minDistance) {
                vertexQueue.remove(v);
                v.minDistance = distanceThroughU;
                v.previous = u;
                vertexQueue.add(v);
            }
        }
    }
}

public static List<Vertex> getShortestPathTo(Vertex target) {
    List<Vertex> path …
Run Code Online (Sandbox Code Playgroud)

java graph

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

自动生成替换方法

为正在制作的应用程序创建语言文件时,我遇到了很多样板代码。我目前有一个包含所有语言字符串的类,然后使用反射将这些字符串写入文件。

我经常碰到的是,我的字符串中有一些要替换的占位符,例如,我可能有一个像这样的字符串:

public static String USER_INFO = "Username: %name% money: %balance%";

我想实现的是基于注释生成一些方法,例如我可以使用lombok生成getter / setter和其他方法。根据上面的字符串,我将有一个注释Arguments(应该正确地命名为“替换者”或更有意义的东西),如下所示:

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface Arguments {
  String[] value();
}
Run Code Online (Sandbox Code Playgroud)

我想做的就是添加这样的注释:

@Arguments(
        value = {"%balance%", "%name%"}
)
public static String USER_INFO = "Username: %name% - money: %balance%";
Run Code Online (Sandbox Code Playgroud)

并自动生成以下替换方法:

public static String USER_INFONameReplacement(String name) {
    return USER_INFO.replace("%name%", name);
}
public static String USER_INFOAllReplacement(String name, String balance) {
    return USER_INFO.replace("%name%", name).replace("%balance%", balance);
}
public static String USER_INFOBalanceReplacement(String balance) {
    return USER_INFO.replace("%balance%", balance);
}
Run Code Online (Sandbox Code Playgroud)

经过一些搜索之后,我最终尝试在这样的类中实现AbstractProcessor:

@SupportedAnnotationTypes(
    {"io.github.freakyville.configHelper.annotations.Arguments"})
@SupportedSourceVersion(SourceVersion.RELEASE_8) …
Run Code Online (Sandbox Code Playgroud)

java code-generation annotations

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

是否可以在qt中自定义滑块?

是否可以制作带图像的滑块?不是作为背景而是像图像我上下拉动而不是滑块?

我已经四处搜索并看到了一些重绘滑块的例子,这是我需要做的事情,如果有的话,你可以链接我的任何例子吗?

还看到了一个叫做QML滑块的东西,我的项目是否可以实现,如果有的话,任何例子都会很棒!

我应该提到我对Qt和编程的一般情况,所以提前抱歉我犯了任何愚蠢的错误.

c++ qt

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

两个构造函数,默认情况下?

好的,我有一个非常简单的任务.

我为类Person提供了这两个构造函数:

Person( const string &, const string &, const string & );
Person( const string &, const string &, const string &,
const string & );
Run Code Online (Sandbox Code Playgroud)

我有4个默认值

其中哪些将成为默认构造函数?它总是最具争议的一个或它是如何工作的?

c++ constructor class

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

矢量迭代器擦除给我一个运行时错误?

所以,我得到了我的类中的梅索德,什么这个类是应该做的是,检查我在.h文件中的矢量具有值bewtween double low&double high然后删除这些,最后返回多少"空间"是怎样才取出

所以我尝试了一些东西,我总是得到运行时错误,它似乎在for循环中,但我无法弄清楚为什么.

这是我试过的,

首先,我尝试按照我认为可行的方式进行操作:

int datastorage::eraseDataPointsBetween(double low,double high) 
{
    int antal = 0;
    for (vector<double>::iterator i = data_.begin(); i !=data_.end();i++)
    {
        if (*i >=low && *i <=high)
        {
            data_.erase(i);
            antal++;
        }

    }
    return antal;
}
Run Code Online (Sandbox Code Playgroud)

但后来我尝试做一些调试,我可以看到它实际上没有让它像那样,当某些东西被删除它仍然会增加(所以如果我们删除"空间2"它实际上将检查空间4下一步时间(因为现场3在擦除后成为现场2)))

所以我试着改变它

int datastorage::eraseDataPointsBetween(double low,double high) 
{
    int antal = 0;
    for (vector<double>::iterator i = data_.begin(); i !=data_.end();)
    {
        if (*i >=low && *i <=high)
        {
            data_.erase(i);
            antal++;
        }
        else 
            i++;
    }
    return antal;
}
Run Code Online (Sandbox Code Playgroud)

只有i当我不删除空格时它才会增加(所以如果我删除"空格2",它将检查新的"空格2"下一次运行)

这也给我一个语法错误 …

c++ vector

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

参考地址

所以我正和朋友讨论参考和指针.

我们谈到的是"你可以拿一个指针的地址,但你不能拿一个参考的地址"

我在这一点上不同意.让我们举一个例子:

int x = 0;
int &xRef = x;
cout << &xRef << &x <<endl;
Run Code Online (Sandbox Code Playgroud)

这个例子显示了相同的地址,但从来没有采取xRef过这样做的地址&xRef.难道你不能说我们有两个具有相同地址的变量,所以即使我正在获取引用的地址,它仍然是引用的地址(即使这是x的地址)?

c++ reference

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

成绩系统数据库设计

我刚刚开始学习数据库,因此我需要一些设计数据库的帮助。我正在尝试制作一个成就系统,但我有点卡住,主要是因为我担心我的设计不是\xc2\xb4t 那么好。我想出了 2 个解决方案,第一个在这里显示:链接 1

\n\n

所以基本上我得到了一个拥有一些 ingameData 的用户。他玩过的每场比赛都会有记录,因此我不需要像total[xyz]这样的数据,其中xyz可以是任何统计数据,因为我可以通过查询获取那些数据。我的问题出在另一边。我有很多用户获得了很多成就。

\n\n

到目前为止我学到的是,您应该始终在许多关系表中拥有 forigen 密钥,因此我需要添加另一个表,如我的 2 解决方案中所示:Link 2。这里我有,许多用户有一个成就表,并且许多成就属于一个成就表。我这里的连接有问题吗?和/或我的设计真的有缺陷吗?这是我的第一个真正的数据库设计,所以我有点无能为力

\n

database sql-server

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

为什么sizeof为char显示4个字节?

所以我现在是一名学生,正在进行编程.

今天我们讨论了在不同类中使用sizeof(如果它有1个int或2个int等等)

我发现奇怪的例子的一部分是这样的:

class TwoIntAndACharClass
{
public:
    int x_;
    int y_;
    char z_;
};
Run Code Online (Sandbox Code Playgroud)

以及测试它的部分

TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass          = " <<  sizeof(o3b) << "\n";
Run Code Online (Sandbox Code Playgroud)

所以在程序中我可以看到一个带有1个字符的类占用了1个字节.所以当我看到这个时,我以为我会看到9个字节而不是12个字节

所以首先我认为它很奇怪,但经过一段时间我得出的结论是它可能会保存一些4字节的块.

为了100%确定这是真的,我尝试在类中添加一个新变量(一个8字节的双变量),总大小从12个字节增加到现在的24个字节.那个char现在必须是8个字节,所以我的最后一个理论失败了.

我的最后一个理论是它将采用最大的已经声明的变量并使用char变量_z的大小,因为这适用于long long int(8字节)和double(也是8字节)

所以我的问题是,我的最后一个理论是真的 - 或者它是否有所不同使得char需要更多的内存然后需要?(我的老师确实说过,每个编译器都能以不同的方式处理这个问题,但是我已经在microsoft visual studio上尝试过了,而且朋友在另一个编译器上尝试了相同的结果,但这是真的,它是编译器处理它的方式吗?)

抱歉我的英语不好.

c++

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