无法重现: C++向量性能比C#列表性能的优势
在Microsoft的Build Conference Conference Herb Sutter上解释说,C ++具有"真实数组",C#/Java语言没有相同或类似. 我被卖掉了.您可以在这里观看完整的谈话 -661 这是他描述的幻灯片的快速快照. https://i.stack.imgur.com/dqaif.png ,但我想看看我会带来多大的区别. 因此,我编写了非常幼稚的测试程序,该程序创建了一个大量的字符串向量,该文件的线条范围从5个字符到50个字符不等. 链接到文件: www (dot) dropbox.com/s/evxn9iq3fu8qwss/result.txt 然后我按顺序访​​问了它们. 我在C#和C ++中都进行了此练习. 注意:我进行了一些修改,按照建议的方式删除了循环中的复制. 感谢您帮助我了解真实的数组. 在C#中,我同时使用了列表和arrayList,因为ArrayList是对列表的弃用.
0 2024-04-17
编程技术问答社区
C#相当于C++的向量或deque
我几乎可以肯定这应该是重复的,但是我搜索了一段时间,找不到答案.我应该在C#中使用什么来替换C ++向量和Deque 有效地.也就是说,我需要一个以有效的方式支持直接索引有效索引的结构,并且还支持从一个或两端(取决于向量或Deque案例)删除的结构. 在java中,我通常至少使用arraylist用于矢量,但是对于c#,我找到了此来源 ArrayList resizes dynamically. As elements are added, it grows in capacity to accommodate them. It is most often used in older C# programs..那么,这是什么新方法呢?再次为Deque Case做什么? 解决方案 没有内置的Deque容器,但是有几种可用的实现. 这是来自Stephen Cleary的好.这提供了o(1)的操作以索引,也可以在开始时插入并附加. . c#等效于向量的是 List
0 2024-04-17
编程技术问答社区
使用三点系统计算一个模型的压痕深度?
通过射线播放,可以在GameObjects对撞机上选择一个点.在简短的视觉效果中,三个点表示表示用户选择的小球.希望计算模型凹痕中任何位置的深度.当前的思想是使用一个系统,在该系统中,用户选择了深度之外的两个点,而不是计算凹痕深度. . 我们可获得的信息是空间中的三个点(向量),它们之间的距离与任何其他使用三个点的向量数学之间的距离.我们如何使用上述数据来计算缩进的深度?是否可行,是一种合理的方法来计算垂直于深度点的点?认为如果这一点是可以计算的,那么深度将是这两个点之间的距离.如何解决这个问题,这是可行的吗?也许有更好的方法? 解决方案 这是一个非常开放的问题,因为"深度"很模糊.如果您可以在世界空间中的模型上找到一些要点,则有两种方法: 方法1:从表面3点创建参考平面. 让用户单击他们想知道的"深度"的点. RaycastHit indentHit; Vector3 depthPoint = indentHit.point; 让用户单击"凹痕"之外的
0 2024-04-17
编程技术问答社区
用任意角度将球弹出墙面?
我试图让用户画一个桨,然后可以用来击球.但是,我似乎无法使球正确反弹,因为球速度的X和Y组分不与墙壁排成一列.我该如何解决这个问题? 我尝试了Gareth Rees 在这里,但显然我不喜欢t对向量有足够的了解,以便能够遵循它.例如,我不知道您到底存储了什么 - 我知道这是一个有方向的值,但是您是否将其存储在坡度之间,斜率,角度? 之间? 我真正需要的是墙的角度,X和Y速度作为球的命中,以找到新的X和Y速度. 解决方案 Gareth Rees的配方正确,但我找到了图片和说明在这里更清楚.也就是说,基本公式是: Vnew = -2*(V dot N)*N + V where V = Incoming Velocity Vector N = The Normal Vector of the wall 由于您不熟悉向量符号,因此您需要知道此公式:向量基本上只是x,y对,所以V = (v.x, v.y)和N = (n.x, n.y).平面最好由平面的态度描述,该平面
0 2024-04-16
编程技术问答社区
基于鼠标的瞄准 Unity3d
我正在制作炮弹射击游戏.这是我正在计算瞄准方向的简短代码. Vector3 mousePos = Input.mousePosition; mousePos.z = thisTransform.position.z - camTransform.position.z; mousePos = mainCamera.ScreenToWorldPoint (mousePos); Vector3 force = mousePos - thisTransform.position; force.z = force.magnitude; 当球和角度(0,0,0)时,这起作用.但是当角度变化时,我将无法向正确的方向射击. 假设球和相机都在右侧看45度,相同的代码不起作用. 当前代码假设两者都在角度(0,0,0).因此,在上述情况下,投掷方向总是错误的.
0 2024-04-16
编程技术问答社区
计算截距向量
我有2个对象(我将它们称为 target 和 Interceptor ). 我知道目标的当前位置和速度. 我知道拦截器的当前位置和速度可以行驶. 由此我需要知道的是: 是同一时间点相同的位置. 拦截器需要在 上行驶的矢量 拦截需要多少时间 i. 我环顾四周,找到了很多方法来找出它们遇到的意义,它们都围绕两个向量之间的角度旋转,而且我不知道第二个矢量,我无法计算出来,我'我迷失了试图解决这个问题. 有关如何进行的任何建议或指导? 解决方案 您可以使用2D矢量计算来计算交叉点.目标沿线移动.我们知道目标的起点,其方向和速度. 在任何时候t> = 0,目标是在 定义的点x处 其中s_t是目标的起点(120、40),而v_t是目标的速度向量(5,2). 我们知道拦截器的起点(s_i),其速度(v_i),但不是其方向.我们可以用围绕起点的圆圈描述拦截器的范围,其半径随着时间的流逝增加.在矢量计算中,我们得到 其中x是圆上的一个点,s_
0 2024-04-15
编程技术问答社区
寻找两个三维线段之间的最短距离
我有两个线段,在其起点/终点为3D点表示. 线: class Line { public string Name { get; set; } public Point3D Start { get; set; } = new Point3D(); public Point3D End { get; set; } = new Point3D(); } 3D点仅是坐标x,y和z的3个双打. 3DPoint: class Point3D { public double X { get; set; } public double Y { get; set; } public double Z { get; set; } } 问题: 我可以找到两个"线"和该距离"线"的端点之间的距离. [ 1 我拥有的: 目前,我可以通过此代码成功获得两行之间的距离( public double lineNearLin
0 2024-04-15
编程技术问答社区
Unity-how to use Vector2.Reflect()
我到处都看过包括Unity文档,但似乎找不到有关如何使用Unity's vector2.freflect()函数的任何好示例.我正在尝试使用它来控制球的方向(在2D突破比赛中)撞到墙壁时.它需要2个参数(间接,无数),但我似乎无法弄清楚如何使用此方法.任何帮助将不胜感激. 解决方案 Vector2 Reflect(Vector2 inDirection, Vector2 inNormal): inDirection:黑色箭头 inNormal:红色箭头 return output:绿色箭头 其他解决方案 inDirection应该是球的速度,inNormal应该是垂直于墙壁的单位矢量. 尝试将其放入您的球对象: void OnCollisionEnter(Collision collision) { Vector2D inDirection = GetComponent().velocity; V
0 2024-04-15
编程技术问答社区
C#相当于C++的向量,有连续的内存?
C ++向量的C#等效是什么? 我正在寻找此功能: 具有一个动态存储的动态存储内存,对于访问与标准数组没有性能惩罚. 我正在搜索,他们说.NET equivalent to the vector in C++ is the ArrayList,所以: arraylist是否具有连续的内存功能? 解决方案 您可以使用 List 和何时T是一种值类型,它将被分配在连续内存中,如果T是参考类型,那将不是这种情况. 示例: List integers = new List(); integers.Add(1); integers.Add(4); integers.Add(7); int someElement = integers[1]; 其他解决方案 使用 List .它在内部使用数组和数组确实使用连续的内存. 其他解决方案 c#具有很多参考类型.即使一个容器存储 参考 连续,这些对象本身可以散布在堆中
0 2024-04-14
编程技术问答社区
将向量<无符号字符>{1,2,3}转换为字符串 "1-2-3 "作为数字。
我想在屏幕上在std::vector中显示数字,但是在通往收件人的路上,我需要将这些数字塞入std::string. . 我尝试的任何东西(atoi,reinterpret_cast,string.c_str() ...),给我一个废话或这些原始数字的字母表示 - 即它们相应的ASCII字符. 那么我如何轻松(最好是标准方法)将vector {1,2,3}转换为string "1-2-3"? 在我提到的原始帖子(后来编辑)中,我可以在C#或Java中这样做. 根据πάνταῥεῖ在C#或Java中提供示例的要求,这是一个快速的Linq C#方法: public static string GetStringFromListNumData(List lNumData) { // if (typeof(T) != typeof(IConvertible)) throw
0 2024-04-14
编程技术问答社区
将一个角度(度)转换为一个矢量
我正在进行一些游戏编程. FWIW我正在使用XNA,但我怀疑这很重要. 我想将学位转换为1. 的定向矢量(即x和y). 我的起源(0,0)在左上方. 所以我希望0度转换为[0,-1] 我认为最好的方法是将我对北/向上的定义进行使用,然后使用矩阵旋转它,但这似乎不起作用. 这是代码... public class Conversion { public static Vector2 GetDirectionVectorFromDegrees(float Degrees) { Vector2 North= new Vector2(0, -1); float Radians = MathHelper.ToRadians(Degrees); var RotationMatrix = Matrix.CreateRotationZ(Radians); return Vector2.
0 2024-04-13
编程技术问答社区
在C#中找不到System.Windows.Vector。
我正在Visual Studio 2010 Ultimate中制作Windows Forms应用程序,但无法让内置向量工作. 微软说有一个也许我犯了一些大错误,但是Visual Studio抱怨尝试以任何方式使用向量,并且在Intellisense Autocomplete中不会出现: 行Vector v = new Vector(20, 30);给出 编译错误错误1找不到类型或命名空间名称'vector'(您是否缺少使用指令或汇编引用?)" 我尝试了顶部的using System.Windows,但这并不能解决问题. 我去了参考 - >添加参考以尝试找到要添加的东西,但没有什么明显的. 问题可能是:在Vector =" noreferrer"> System.Windows 名称空间,还有其他类,例如Rect或Application.我可以将它们用作System.Drawing.Rectangle或System.Windows.Forms.Appli
0 2024-04-12
编程技术问答社区
如何在与给定输入向量3正交的所有向量中找到与给定目标向量最接近的向量3?
假设我有两个输入向量具有非零幅度: Vector3 t; Vector3 o; 我需要找到归一化的向量v,以便在所有正交o>>>>>的归一化矢量中,v是最接近此t" target"向量的向量.我还需要知道t和o是否是colinear,在这种情况下,没有人存在这样的单一v. 这种关系的例证: 对于一个具体的例子,假设我有一个游戏,玩家偶尔会在环境中的表面上看到某个类似指南针的对象.玩家将不得不将针头的针头指向一个图像的物体,该物体被随机放置在游戏世界中的某个地方.当玩家选择针的位置时,我需要知道玩家选择距离对象的"真实"方向有多远. 指南针是固定的,可以用世界方向o旋转旋转(也许这是指南针的transform.forward),而所示的游戏对象的方向为t. 当t和o不是正交时,指南针将无法直接指向t,所以我想知道:我如何才能获得最接近的方向可以指向哪个是v?,我可以测量该目标方向与玩家选择的方向之间的角度.而且,当该角度低于某个阈值时,玩家就成功了.
2 2024-04-12
编程技术问答社区
C: 将向量元素按降序排列
我正在尝试创建一个可以重新排列数组的函数,以便它以降序顺序.阵列由正整数组成,没有两个相等的元素.这就是我所拥有的: int check (int *v, int n){ int i; for (i=0; i v[i]) break; else if (k == n-1){ vp[j] = v[i];
0 2024-04-10
编程技术问答社区
在C/openCL中处理矢量元素
我正在pyopencl上写一个opencl内核,我想解决矢量元素. 在平原C中,我要获得的结果是: int i = 0; float *vec = (float*)maalloc(sizeof(float)*4); for (i=0;i
0 2024-04-10
编程技术问答社区
gcc优化离开复合语句
我在为c中的通用ressizable vector实施push_back运算符时遇到了问题.为了通用,我需要使用void指针作为参数,但实际上我想直接给它给它. 当我用gcc -o t test.c -std=c99编译以下代码时,它会如我期望打印10. 当我将-O1(或更高)添加到编译选项时,程序打印0. 我认为问题在smemcpy代码中,就像我用memcpy替换时,我不再有这个问题. 简化的代码: #include #include #define get_pointer(value) ({ __typeof__(value) tmp = value; &tmp; }) // copy from src to dst byte by byte void* smemcpy(void* dst, void const * src, size_t len) { char * pdst = (char *) dst
0 2024-04-10
编程技术问答社区
我如何访问和打印分布在MPI工作者之间的完整矢量?
如何从MPI中的单个线程访问全局向量? 我正在使用一个库 - 特别是一个ode求解器库 - 称为cvode( sundials ).该库与MPI一起使用,因此多个线程并行运行.他们都在运行相同的代码.每个线程都会将线程"旁边"它发送一个数据.但是我希望其中一个线程(rank = 0)在某些方面打印出数据状态. 库包括每个线程可以访问他们自己的数据(本地向量).但是没有访问 global 向量的方法. 我需要在特定时间输出所有方程的值.为此,我需要访问全球向量.任何人都知道如何在MPI向量中获取所有数据(如果可能的话,使用CVODE)? ? 例如,这是我的代码,每个线程运行 for (iout=1, tout=T1; iout
0 2024-04-10
编程技术问答社区
如何通过从文件中读取不同数据类型的数据推入一个向量?
我想使用以下代码将以下数据推入向量.但是我的代码仅适用于整数.我可以如何对以下数据进行此操作?谢谢. 我的数据: M,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15 M,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7 F,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9 M,0.44,0.365,0.125,0.516,0.2155,0.114,0.155,10 I,0.33,0.255,0.08,0.205,0.0895,0.0395,0.055,7 I,0.425,0.3,0.095,0.3515,0.141,0.0775,0.12,8 F,0.53,0.415,0.15,0.7775,0.237,0.1415,0.33,20 F,0.545,0.425,0.125,0.768,0.294,0
0 2024-04-09
编程技术问答社区
将结构中的指针分配给一个变量
该程序应该创建动态内存向量.我很确定我正确使用了Malloc.我的真正问题是一些指针的语法,尤其是结构内部的指针. 我正在尝试访问结构内部的int指针的地址,以便我可以将其分配给另一个指针 我给定的结构是: typedef struct{ int *items; int capacity; int size; }VectorT; 和我要上班的功能是: int getVector(VectorT *v, int index){ int *p; p = v->items;//(2) p -= v->size; p += index; return *p; } 这应该将项目指针的地址减去列表中的项目数,然后将所需项目的索引添加到p的地址.然后我返回第p. 的地址 我有一种非常强烈的感觉,即(2)不是我需要的语法. 取决于我到目前为止我尝试过的方法,即我的程序在调用GetVector或输出(我最好的猜测)某些内存位
2 2024-04-09
编程技术问答社区
在预定义结构上创建动态矢量
我有一个预定义的结构: typedef struct somestruct_s { int s; union { unsigned char *ptr; unsigned char l_ptr[sizeof(char *)]; }; }somestruct_t, *somestruct; 它包含减少内存使用量的联合. 我知道由于M32和M64汇编(指针尺寸),大小可能会有所不同. 我的问题是如何将该结构"使用"作为我的精确任务.该结构的目的是实施基本的位操作,S变量包含字节中的位图的大小.如果位图可以适合指向位图的指针所占据的内存内部,那么我们将她分配给她.我在上面写一些位图操作,但我真的无法获得结构或如何操作. 解决方案 我不明白你的问题是什么.您必须具有一个主要功能,该功能将根据指针尺寸返回正确的指针到位图: unsigned char* somestruct_get_bitmap(somestruct_
0 2024-04-09
编程技术问答社区