小编cod*_*ing的帖子

如何从使用 for 循环中的向量大小的向量中删除元素

我有一个游戏,我向一个物体射击子弹,然后我删除了被子弹击中的物体以及屏幕外的子弹。

例如:

std::vector<object> object_list;
for(size_t i = 0; i < object_list.size(); i++)
{

    if(object_list[i].hit())
    {
        object_list.erase(object_list.begin() + i);
    }
    else
        object_list[i].draw();
}
Run Code Online (Sandbox Code Playgroud)

The problem with this is that when i remove an object, the size of the vector decreases so when it check the conditions, it fails and i get an error such as " vector subscript out of range." I could just choose not to render the asteroid by rendering those that haven't been hit, but the problem with …

c++ vector

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

为什么要考虑缓冲区而不是线路?fgets() 可以一次读取多行吗?

最近我在读《Unix网络编程第一卷》。在3.9节中,图3.18最后两段说了,这里我引用一下:

...但是我们的建议是从黄油而不是行的角度来思考,编写代码来读取数据的黄油,如果需要一行,请检查缓冲区以查看它是否包含该行。

在下一段中,作者给出了一个更具体的例子,这里我引用一下:

...我们将在第 6.3 节中看到。像 select 这样的系统函数仍然不知道 readline 的内部缓冲区,因此粗心编写的程序很容易发现自己在 select 中等待已经接收并存储在 readline 缓冲区中的数据。

在6.5节中,实际的问题是“stdio和select()的混合”,这将使程序“容易出错”,这里我引用这本书。但如何呢?

我知道作者稍后在同一节中给出了答案,根据我对本书的理解,这是因为 select() 隐藏了数据,因此 select() 无法知道已读取的数据是消耗与否。

答案确实存在,但这里的第一个问题是我真的很难得到它,我无法想象它会对程序造成什么损害,也许我需要一个遇到这个问题的演示程序来帮助我理解它。

还是在第 6.5 节中,作者试图进一步解释这个问题,我在这里引用:

...考虑当标准输入有几行输入可用时的情况。select 将导致第 20 行的代码使用 fgets 读取输入,然后将可用行读入 stdio 使用的缓冲区中。但是,fgets 只返回一行,并将所有剩余数据留在 stdio 缓冲区中......

上面提到的“第20行”是:

if (Fgets(sendline, MAXLINE, fp) == NULL)
Run Code Online (Sandbox Code Playgroud)

其中 sendline 是 char 数组,fp 是指向 FILE 的指针。我查看了 Fgets 的详细实现,它只是用一些额外的错误处理逻辑包装了 fgets() ,仅此而已。

这是我的第二个问题,fgets 如何设法,在这里我再次引用,读取可用的行?我的意思是,我查阅了 fgets 的手册页,它说 fgets 通常在第一个换行符处停止。这不是意味着 fgets 只会读取一行吗?更具体地说,如果我在终端中输入一行并按 Enter 键,则 fgets 会读取这一行。我再次执行此操作,然后 fgets 读取下一个新行,并且该点一次一行。

感谢您耐心阅读所有描述,并期待您的答复。

c++ unix network-programming

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

如果两个数字是相同的 0,则在 C++ 和 Root 中使 0 条件

在我的代码中,图例在循环内运行,我试图显示一个图表

0-10%
10-20%
Run Code Online (Sandbox Code Playgroud)

等等。问题是当我写这段代码时

legend->AddEntry(gr[i], Form("%d0-%d0 %%",i+0,i+1), "lep");
Run Code Online (Sandbox Code Playgroud)

表明

00-10%
10-20% etc
Run Code Online (Sandbox Code Playgroud)

那么如何在第一行不显示00,而是显示0呢?

c c++ root-framework

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

sscanf字符串拆分不起作用

有人可以解释为什么字符串不会在以下代码中分裂

#include <stdio.h>

int main(void)
{
    char name[] = "first:last";
    char first[20], last[20];

    sscanf(name, "%s:%s", first, last);

    printf("first: %s, last: %s", first, last);

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

输出是

第一:第一:最后,最后:

但它应该是

第一:第一,最后:最后

请在此处查看代码http://ideone.com/JDSTt

c string split scanf

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

Log4net 配置错误

我正在使用 Log4Net 在我的 Web 应用程序中记录异常。

在这里我找到了一个配置示例:http : //www.csharptocsharp.com/log4net-configuration-for-rockin-loggin

<?xml version="1.0"?>

<configuration>
  <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>

  <log4net>
    <!--
  This writes the log information to the console window.  It only logs events
  that are at least at the INFO level (which would mean that DEBUG events are not
  captured.
  -->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newlineExtra Info: %property{testProperty}%newline%exception"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    <!--
  This stores information in the log.txt …
Run Code Online (Sandbox Code Playgroud)

c# logging log4net

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

如何用另一个字符串替换字符串中的字符?在c ++中

这是我的代码,但它说replace is not declared in this scope这不是正确的语法?

#include<iostream>                                                                          
#include<string>                                                                            


using namespace std;                                                                        

int  main ()                                                                                
{                                                                                           
  string string_to_edit;                                                                    
  cout<<"Enter a string to replace all the vowels:"<<endl;                                  
  cin>>string_to_edit;                                                                      
  string output_string=replace(string_to_edit.begin(),string_to_edit.end(),"a","x");               
  cout<<output_string<<endl;                                                                
  return 0;                                                                                 
} 
Run Code Online (Sandbox Code Playgroud)

c++

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

QDockWidget tabify/splitDockWidget奇怪的行为/ bug?

我有一个MdiChilds应用程序,它应该包含多个QDockWidgets.然而,我在分割/标记窗口小部件时遇到麻烦,以便它们生成所需的默认布局.我基本上想要这样的布局:

QDockWidgetTest所需的布局

窗口小部件4最后创建,需要在列表窗口小部件2和3旁边.但是,插入它会导致自身和另一个窗口小部件丢失:

QtDockWidgetTest截图

这是产生第二个屏幕截图的代码:

在主窗口的构造函数(或mdi孩子,并不重要)我执行以下操作:

QDockWidgetTest::QDockWidgetTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    setCentralWidget(0); // only QDockWidgets
    QWidget* testWidget1 = new TestWidget("1", QColor("red"));
    QWidget* testWidget2 = new TestWidget("2", QColor("green"));
    QWidget* testWidget3 = new TestWidget("3", QColor("blue"));
    QWidget* testWidget4 = new TestWidget("4", QColor("yellow"));
    DockWidgetWrapper* testQWidget1 = new DockWidgetWrapper(testWidget1, "Test Widget 1", "TestWidget1");
    DockWidgetWrapper* testQWidget2 = new DockWidgetWrapper(testWidget2, "Test Widget 2", "TestWidget2");
    DockWidgetWrapper* testQWidget3 = new DockWidgetWrapper(testWidget3, "Test Widget 3", "TestWidget3");
    DockWidgetWrapper* testQWidget4 = new DockWidgetWrapper(testWidget4, "Test Widget 4", "TestWidget4");
    addDockWidget(Qt::LeftDockWidgetArea, testQWidget1);
    splitDockWidget(testQWidget1, testQWidget2, Qt::Vertical);
    tabifyDockWidget(testQWidget2, …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt4.8 qt5

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

JQuery - 结束日期少于开始日期

我正在努力解决我遇到的这个问题.我必须输入标签,一个用于培训开始日期,另一个用于培训结束日期.我想要做的是创建一个jQuery函数,阻止用户选择结束日期小于开始日期,反之亦然.

任何帮助将不胜感激.

<div class="control-group">
    <label class="control-label">Training beggining date:</label>
    <input id="StartDate" style="margin-left: 10px;" size="16" type="text"/>
</div>
<div class="control-group">
    <label class="control-label">Training completion date:</label>
    <input id="EndDate" style="margin-left: 10px;" size="16" type="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

html jquery twitter-bootstrap

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

无法在main方法中调用方法

我试图用另一种方法(比如在C#中)调用一个方法,如下所示:

public class Exercise1
{
   Scanner scanner = new Scanner(System.in);
   public int FirstNumber;
   public int SecondNumber;
   public int Answer;

   public static void main(String [] args)
   {
       GetNumbers();
   }

   private void GetNumbers()
   {
       System.out.print("Type in the first number: ");
       FirstNumber = scanner.nextInt();

       System.out.print("Type in the second number: ");
       SecondNumber = scanner.nextInt();

       Answer = FirstNumber + SecondNumber;

       System.out.print("The answer is: " + Answer);
   }
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样调用这个方法?

java

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

C++ 如果 catch 块内发生异常会发生什么?

如果 catch 块内发生异常会发生什么?

try {}
catch(...)
{
    stream.close(); // IO exception here
}
Run Code Online (Sandbox Code Playgroud)

默认行为是什么?

c++

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