我希望如果我发布已解决的问题并要求更漂亮的解决方案,这样我就可以看到它是如何正确完成的
我想要一个用ProcessID映射的所有进程名称的列表.像"notepad.exe" -> 4242
Ofc这样的东西可以有多个实例,所以它应该是类似的东西"notepad.exe" -> List(4242,7171)
我有一个方法,它给了我一个元组
private def extractProcess(s: String): (String, Int) = {
val process = s.split(" ").filterNot(str => str == "")
(process(0), process(1).toInt)
}
Run Code Online (Sandbox Code Playgroud)
输出将是 ("Notepad.exe",4242)
processList包含来自windows tasklist的原始字符串,看起来像这样
svchost.exe 4464 Services 0 47.656 K
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个包含所有进程的地图,我就这样做了
val process: Map[String, List[Int]] = Map()
processList.drop(5).map(s => {
val element = extractProcess(s)
if (process contains element._1) {
val p = process get element._1
process(element._1) = p.get ::: List(element._2)
} else {
process(element._1) = List(element._2)
}
})
Run Code Online (Sandbox Code Playgroud)
我把前5个元素下载了,因为它们不需要
现在输出看起来像这样 …
我从 3 个学期开始学习计算机科学,我们刚刚开始使用 openGl 1.0。我们正在做非常基础的事情(api 背后的数学)。
讲座分为4个部分,为期4个学期。
现在我真的很想在听这堂课的时候读一本书,但我不确定我应该读哪本书。
我应该买一本 opengl 1 还是 opengl 3+ 的书?
或者我应该等到我们从 opengl3 开始,同时阅读一本关于数学的书,像这样的书?
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
vbo.bind(GL_ARRAY_BUFFER);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDisableVertexAttribArray(0);
ibo.bind(GL_ELEMENT_ARRAY_BUFFER); //where do I put this?
glBindVertexArray(0);
while (glfwGetWindowParam(GLFW_OPENED)) {
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
glfwSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)
我理解VAO的方式是我创建一个vao句柄并像这样绑定它
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
Run Code Online (Sandbox Code Playgroud)
现在我可以用这三个命令填充VAO
vbo.bind(GL_ARRAY_BUFFER);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDisableVertexAttribArray(0);
Run Code Online (Sandbox Code Playgroud)
我应该注意到我在这里使用了自己的vbo类.
然后我关闭了我的VAO
glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)
然后我可以在renderloop中加载它
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)
但我没有得到任何输出.
现在我认为它与我的索引数组有关.(ibo)如何将VAO与IBO一起使用?
我理解头盔是什么,但我从来没有看到它如何在更大的项目中使用.我目前正在编写一个OpenGL抽象层,我主要需要包含相同的文件.
所以我的第一个天真的方法是做这样的事情:
#ifndef GUARD_H
#define GUARD_H
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <GL/glfw3.h>
#include <glload/gl_core.h>
#include <glload/gll.h>
#endif // GUARD_H
Run Code Online (Sandbox Code Playgroud)
所以我可以做到#include "guard.h".但我意识到这不是一个非常好的解决方案,因为如果我想添加一个简单的包含怎么办?
是的我可能会在这个文件中写下我的所有包含但我也不确定这是不是一个好主意.
你会如何推荐我构建我的头部守卫?你能推荐我任何资源吗?
更新1:小例子
test.h
#ifndef TEST_H
#define TEST_H
#include <glm/glm.hpp>
class test{
};
#endif
test1.h
#ifndef TEST1_H
#define TEST1_H
#include <glm/glm.hpp>
class test1{
};
#endif
Run Code Online (Sandbox Code Playgroud)
现在我把glm包含在我的测试类中.但是,如果我想做这样的事情怎么办?
#include "test.h"
#include "test1.h"
int main(){
//...
}
Run Code Online (Sandbox Code Playgroud)
我不是#include <glm/glm.hpp>主要包括 2次吗?
我是haskell的新手,我认为我理解ADT和类型类的概念,但我仍然有点困惑.
我试图创建一个小游戏,然后我开始布局数据结构.
现在我开始了
data Consumable = Food
| Water
| Potion
data Equipment = Weapon
| Shield
Run Code Online (Sandbox Code Playgroud)
双方Consumable并Equipment有关系,都是项目,但我不知道我应该如何在Haskell表达这种.
我想也许我应该创建一个名为Item的类型
Class Item where
use ::
Run Code Online (Sandbox Code Playgroud)
然后制作消耗品和设备两个物品的实例.或者我可以表达它
data Item = OneTimeUseable Consumable
| Equipable Equipment
Run Code Online (Sandbox Code Playgroud)
感觉像haskell比我学到的其他语言更具表现力,我在设计应用程序时遇到了一些麻烦.
您可以给我的任何提示/指南?
namespace Test
type Foo() =
member this.HelloFoo = "Foo"
member this.HelloFooBar =
let b = new Bar() // Why is Bar not visible here?
this.HelloFoo + b.HelloBar
type Bar() =
member this.HelloBar = "Bar"
Run Code Online (Sandbox Code Playgroud)
为什么在Foo中看不到Bar?
我通常从不写 C++,今天我尝试尝试 C++ 模板。我实现了一个看起来像这样的 Maybe 类型
#include <functional>
#include <iostream>
#include <string>
template<typename T>
class TMaybe
{
T value;
public:
TMaybe() : value(nullptr){}
TMaybe(T &&v) : value(v){}
TMaybe(T v) : value(v){}
};
template<typename T, typename R>
TMaybe<R> maybe_if(const TMaybe<T> &m, std::function<R(T v)> f){
return (m.value != nullptr) ? TMaybe<R>(f(m)) : TMaybe();
}
int main(){
int i = 10;
auto m = TMaybe<int>(i);
auto plus_ten = [](int i) -> int {return i + 10;};
maybe_if(m, plus_ten); // could not deduce template …Run Code Online (Sandbox Code Playgroud) template<???>
struct Container{
T t;
M<T> v;
}
Run Code Online (Sandbox Code Playgroud)
哪里Container<vector<int>>应该生成
struct Container{
int t;
vector<int> v;
}
Run Code Online (Sandbox Code Playgroud)
我可以用模板表达这个吗?
我是emacs的新手,正在使用邪恶模式。
当我用j,k滚动并移出屏幕时,emacs将把光标下方的当前行重新调整到屏幕中间。
在哪里可以禁用此功能?
struct foo{
int* i;
foo(): i(new int(42)){}
foo(const foo&) = delete;
foo(foo&&) = default;
~foo(){
std::cout << "destructor: i" << std::endl;
delete(i);
}
};
int main()
{
foo f;
auto sp_f = std::make_shared<foo>(std::move(f));
}
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为似乎析构函数f一旦进入就会被调用shared_ptr.在shared_ptr将已删除的指针,它超出范围,这意味着该指针将被删除两次之后将其删除.
我该如何避免这个问题?