小编Try*_*yer的帖子

插入前面的矢量

iterator insert ( iterator position, const T& x );
Run Code Online (Sandbox Code Playgroud)

std::Vector类的insert运算符的函数声明.

此函数的返回类型是指向插入元素的迭代器.我的问题是,给定这种返回类型,最有效的方法是什么(这是我正在运行的一个更大的程序的一部分,其中速度是最重要的,所以我正在寻找有效的计算方式)在开头插入.是以下吗?

//Code 1
vector<int> intvector;
vector<int>::iterator it;
it = myvector.begin();
for(int i = 1; i <= 100000; i++){
    it = intvector.insert(it,i);
}
Run Code Online (Sandbox Code Playgroud)

要么,

//Code 2
vector<int> intvector;
for(int i = 1; i <= 100000; i++){
    intvector.insert(intvector.begin(),i);
}
Run Code Online (Sandbox Code Playgroud)

基本上,在代码2中,是参数,

intvector.begin() 
Run Code Online (Sandbox Code Playgroud)

与在代码1中使用返回的迭代器相比,计算评估的"成本"还是应该同样便宜/昂贵?

c++ performance vector

43
推荐指数
5
解决办法
8万
查看次数

VSCode - 将文件的当前未保存版本与磁盘上已保存的版本进行比较

假设我正在对先前存在的文件进行长时间的编辑会话,并且尚未保存编辑/更改。我想将这个已更改但未保存的版本与磁盘上保存的版本进行比较。

这可以在 VSCode 中本地实现还是通过扩展实现?

在 VIM 中,存在这种可能性,这里有一些参考:

在 Vim 中保存文件之前我可以看到更改吗?

VIM - 显示上次保存版本和当前未保存版本的差异

visual-studio-code

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

VSCode 快捷键 Ctrl+Shift+e 呈现为未知,而不是导航到资源管理器窗口

我正在尝试通过导航到资源管理器窗口Ctrl+Shift+e,但 无法识别该击键序列VSCode 1.55.2

我通过两种方式检查了这一点。首先,尝试通过键盘快捷键 ( ) 检查Ctrl+Shift+wCtrl+Shift+e绑定的内容Ctrlk, Ctrls,然后记录击键以揭示它们绑定的内容。

在此输入图像描述

你会发现它ctrl+shift+w被认可了。然后,在 gif 中,当我按下它时,ctrl+shift+e它会呈现为ctrl+shift+unknown.

然后,每当在编辑器中保存的打开文件中,当我按下ctrl+shift+e希望浏览器导航器在左侧打开时,这种情况不会发生。相反,该文件未保存,并且文件中出现下划线 e。

在此输入图像描述

这是编辑器全新且奇怪的行为。我以前没有遇到过这种情况。

任何帮助表示赞赏。


编辑添加更新:VSCode 人员表示这是一个已知问题。Ctrl+shift+e 似乎可以翻译为插入表情符号。在这里查看他们的评论。

visual-studio-code

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

谷歌地球或谷歌地图测地线是直线?

谷歌地球或谷歌地图测地线是直线?也就是说,当我在我的2D计算机屏幕上查看谷歌地球或谷歌地图数据时,我看到的图像是否正确"调整",这个"调整"图像上的直线实际上是测地线?

如果不是,我可以在这些应用程序中选择哪些选项让我"调整"图像,以便这个"调整"图像上的直线将是测地线?

有没有其他免费的应用程序显示"调整"的地图,其中屏幕上的直线实际上是测地线?

有没有免费的应用程序可以为我提供地球上两点之间的测地路径?

先感谢您.

google-maps google-earth

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

在两个连续的pragma omp的情况下,隐式屏障vs nowait

查看此处的文档,以下结构已明确定义:

#pragma omp parallel          //Line 1
{
#pragma omp for nowait        //Line 3
  for (i=0; i<N; i++)
    a[i] = // some expression
#pragma omp for               //Line 6
  for (i=0; i<N; i++)
    b[i] = ...... a[i] ......
}
Run Code Online (Sandbox Code Playgroud)

以来

这里的nowait子句意味着线程可以在第二个循环上启动,而其他线程仍然在第一个循环上工作.由于这两个循环在这里使用相同的调度,因此使用[i]的迭代确实可以依赖于已经计算了该值的迭代.

我很难理解为什么会这样.假设Line 3是:

#pragma omp for

然后,由于之前存在隐式屏障Line 6,下一个for循环将在a完全计算的所有索引处具有值.但是,随着no waitLine 3,将如何运作?

假设,Line 1触发4个线程,t1, t2, t3并且t4.假设N是8并且第一个for循环中的索引分区是:

t1: 0, 4
t2: 1, 5
t3: 2, …
Run Code Online (Sandbox Code Playgroud)

c++ openmp

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

VSCode - 随着实现文件的更改同时更新类头文件

我发现自己经常做以下操作。

  1. 感觉需要在类中添加一个新函数。
  2. 在头文件中提供基本声明。在实现文件中以相同的签名开始函数定义。
  3. 随着函数的构建,意识到需要额外的参数才能使函数正常工作。
  4. 更新实现文件中的签名。在此阶段,由于头文件和实现文件之间的函数签名不匹配,因此 VSCode 会正确指出有关不匹配的红色波浪线。因此,函数中针对新参数的所有自动完成和智能感知操作都会停止。(刚刚在 1.60.0 上进行了检查。虽然继续出现红色波浪线表示不匹配,但新参数的智能感知在实现文件中仍然可用。)
  5. 要解决此问题,请转到头文件并同步声明和定义之间的签名。

下面的 gif 展示了步骤 3、4 和 5 的示例:

在此输入图像描述

步骤 3、4 和 5 是相当重复且可预测的。有没有办法让 VSCode 在函数定义根据所需参数发生变化时同时更新声明?那么至少可以暂时避免第 5 步?

我不知道这个代码编写过程(步骤3、4和5)是否有一个特殊的名称。有没有其他方法可以提高这个过程的效率/生产力?

ETA:如上所述,我刚刚检查了 1.60.0。虽然红色波浪线继续出现指示不匹配,但新参数的智能感知在实现文件中仍然可用。所有班级成员仍然可以参加。因此,也许最好的解决方案是继续开发/编码实现文件中的函数,并最终更新头文件。不过,我不知道这样做是否会同时破坏其他任何东西。其一,从类头文件声明到定义是行不通的。

c++ visual-studio-code

6
推荐指数
0
解决办法
760
查看次数

与 #endif 位于同一行的语句的编译器警告

考虑代码:

#include <stdio.h>

int main() {
    int a = 4;
#if 1
    printf("Hello world\n");
#endif a++;
    printf("a is %d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

不经意间,statementa++;与 a 位于同一行,#endif并且不被求值。结果,最终的输出是:

Hello world
a is 4
Run Code Online (Sandbox Code Playgroud)

在 x86-64 clang 12 上,这是使用 using option 捕获的警告-Wextra-tokens。看这里

我尝试在 Visual Studio 2019 MSVC 上使用命令行选项进行编译:

/JMC /permissive- /ifcOutput "Debug\" /GS /analyze- /W3 /Zc:wchar_t /I"../include/" /ZI /Gm- /Od /sdl /Fd"Debug\vc142.pdb" /Zc:inline /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio visual-c++

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

Visual Studio IDE:在集成终端/开发人员电源外壳中开始调试会话,而不是单独的外部控制台应用程序

在 Windows 中的 Visual Studio IDE 中调试 C++ 应用程序时,是否可以在集成为 IDE 底部窗口窗格的终端中启动应用程序?目前,点击F5开始调试强制启动外部控制台应用程序。

请参阅随附的 gif 图片:

在此输入图像描述

您会注意到侧面打开了一个新的外部控制台。IDE 的右下角有一个“Developer Powershell”窗格。可以在此窗格中调试应用程序吗?

这个问题的味道以前已经被问过。然而,他们似乎收到了相互矛盾且不明确的答案。例如,参见SO 上的这个线程。

很少有网站声称这是可能的,并且似乎提供了实现这一点的教程。例如,请参见此处。但是,这似乎是 .net 应用程序,而不是 C++ 应用程序。


即使使用 VSCode(不同的环境),似乎也无法在 IDE 本身的 Windows 中启动 C++ 调试会话。请参阅此处有关此问题的问题/答案。看来必须 推出外部新控制台。

c++ debugging visual-studio visual-studio-2019 visual-studio-2022

5
推荐指数
0
解决办法
905
查看次数

应用于数组时最小的正乘数使数组成为整数

给定的阵列n非负元素,有在该返回C/C++的任何库中的函数最小正乘数,当施加到所述阵列的每个元件返回一个整数数目?

例如,如果数组为n=2is 1.66667, 2.33333,则乘数为3.当我们将数组的每个元素乘以3时,我们得到5, 7两个整数.

如果是数组8,10,则乘数为0.5.这会给我们4,5.

(1)是否有任何的公知的库,如用于此的有效功能boost,eigen等?

(2)如果库中没有可用的东西,那么找出多个算法的有效算法是什么?

c c++ algorithm boost eigen

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

clang-format 不会修改磁盘上的文件

我有以下格式错误的文件,test.cpp

#include "maininclude.h"

int main() {
             class SIMPLE smpl;
  for (int i = 1; i < 100; 
  i++) {
      printf("Printing %d", i); // Trying out different stuff...
getchar();
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在上面运行clang-format。在运行此命令之前,为了直观地查看要修改的位置,我运行clang-format -n test.cpp. 这可以正确识别由于终端上的格式和输出错误而将更改的位置:

test.cpp:3:13: warning: code should be clang-formatted [-Wclang-format-violations]
int main() {
            ^
test.cpp:5:27: warning: code should be clang-formatted [-Wclang-format-violations]
  for (int i = 1; i < 100; 
                          ^
test.cpp:6:9: warning: code should be clang-formatted [-Wclang-format-violations]
  i++) {
        ^
test.cpp:7:64: warning: code should …
Run Code Online (Sandbox Code Playgroud)

c++ clang-format

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