相关疑难解决方法(0)

C++:"std :: endl"vs"\n"

许多C++书籍都包含这样的示例代码......

std::cout << "Test line" << std::endl;
Run Code Online (Sandbox Code Playgroud)

......所以我也一直这样做.但我已经看到很多来自像这样的开发人员的代码:

std::cout << "Test line\n";
Run Code Online (Sandbox Code Playgroud)

是否有技术上的理由偏爱另一个,或者仅仅是编码风格的问题?

c++ iostream coding-style c++-faq

530
推荐指数
10
解决办法
18万
查看次数

C++中的高效字符串连接

我听到一些人表达了对std :: string中"+"运算符的担忧以及加速连接的各种变通方法.这些都真的有必要吗?如果是这样,在C++中连接字符串的最佳方法是什么?

c++ string performance concatenation

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

C++流混淆:istreambuf_iterator vs istream_iterator?

istreambuf_iterator和之间有什么区别istream_iterator?一般来说,stream和streambufs有什么区别?我真的找不到任何明确的解释,所以决定在这里问.

c++ istream streambuf

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

为什么std :: fstreams这么慢?

我正在研究一个简单的解析器,在进行分析时我发现瓶颈在...文件读取!我摘录了非常简单的测试来比较的性能fstreamsFILE*读取数据的大斑点时:

#include <stdio.h>
#include <chrono>
#include <fstream>
#include <iostream>
#include <functional>

void measure(const std::string& test, std::function<void()> function)
{
    auto start_time = std::chrono::high_resolution_clock::now();

    function();

    auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - start_time);
    std::cout<<test<<" "<<static_cast<double>(duration.count()) * 0.000001<<" ms"<<std::endl;
}

#define BUFFER_SIZE (1024 * 1024 * 1024)

int main(int argc, const char * argv[])
{
    auto buffer = new char[BUFFER_SIZE];
    memset(buffer, 123, BUFFER_SIZE);

    measure("FILE* write", [buffer]()
    {
        FILE* file = fopen("test_file_write", "wb");
        fwrite(buffer, 1, BUFFER_SIZE, file);
        fclose(file);
    });
    measure("FILE* read", [buffer]() …
Run Code Online (Sandbox Code Playgroud)

c++ performance

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

C++构造替换C构造

在与我的团队中新来的开发人员讨论之后,我意识到在C++中仍然存在使用C构造的习惯,因为它们应该更好(即更快,更精简,更漂亮,选择你的理由).

与类似的C++构造相比,有哪些示例值得共享,显示C构造?

对于每个示例,我需要阅读C++构造与原始C构造一样好或甚至更好的原因.目的是提供一些在C++代码中被认为有些危险/不安全的C构造的替代方案(C++ 0x只有在只有明确标记为C++ 0x的情况下才能接受答案).

我将在答案(结构内联初始化)下面作为示例发布.

注1:请每个案例一个答案.如果您有多个案例,请发布多个答案

注2:这不是C问题.不要在此问题中添加"C"标签. 这不应该成为C++和C之间的斗争.只研究C++的C子集的一些结构,以及它们在其他C++"工具包"中的替代方案.

注3:这不是一个抨击C的问题.我想要理由.吹嘘,抨击和未经证实的比较将被下调.提及没有C等价物的C++特性可以被认为是不可能的主题:我希望并排放置一个针对C++特性的C特征.

c c++ language-construct

17
推荐指数
9
解决办法
3177
查看次数

c和c ++中最快的文件输出

我正在帮助某人提出有关在C中输出的问题,而我无法回答这个看似简单的问题我想用答案(在我的回答中),即:

在C/C++中输出文件的最快方法是什么?

我使用C++和Java完成了素数生成和数学算法优化的大量工作,这对我来说有时是最大的劫持 - 我有时需要移动很多文件并且速度很快.

请原谅我,如果这已经得到回答,但我一直在寻找google和SO一段时间无济于事.

我不希望有人做基准测试的工作 - 但有几种方法可以存档,我怀疑我知道这一切.

总结一下,

有什么方法可以用C和C++输出到文件?

哪些是更快的?

显然从控制台重定向是非常糟糕的.任何简单的比较printf,cout,fputc,等会有所帮助.

编辑:

从评论中,

cout和printf有一个很好的基线测试: 混合cout和printf以获得更快的输出

这是一个很好的开始,但不是我要问的最佳答案.例如,它不处理评论中提到的std :: ostreambuf_iterator <>,如果这是可能的话.它也不处理fputc或提到控制台重定向(相比之下有多糟糕)(不是它需要)

编辑2:

此外,为了争论我的历史案例,你可以假设输出几乎无限量的数据(程序在较新的英特尔i7上运行数天,产生千兆字节的文本)

临时存储在这里只是非常有用 - 你不能轻易地缓冲千兆字节的数据.

c c++ io file-io

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

自动 cout 冲洗

再会,

我编写了一个 Java 程序,它使用 Process 对象和 Runtime.exec() 函数调用启动多个 C++ 编写的程序。C++ 程序使用 cout 和 cin 作为它们的输入和输出。Java 程序从 C++ 程序的输入流和输出流中发送信息和读取信息。

然后我有一个字符串缓冲区,它通过将 C++ 程序的输入和输出附加到字符串缓冲区来构建程序的典型交互。问题是所有输入调用都被追加,然后所有输出调用都被发布。例如,StringBuffer 的实例可能是这样的......

2
3
Please enter two numbers to add. Your result is 5
Run Code Online (Sandbox Code Playgroud)

当程序在标准控制台上看起来像这样

Please enter two numbers to add. 2
3
Your result is 5
Run Code Online (Sandbox Code Playgroud)

问题是我得到了输入和输出的顺序,因为除非 C++ 程序调用 cout.flush() 函数,否则在给出输入之前不会写入输出。

有没有办法自动刷新缓冲区,这样 C++ 程序就不必担心调用 cout.flush()?类似于 C++ 程序是一个与命令控制台交互的独立程序,程序员并不总是需要 cout.flush(),命令控制台仍然在输入之前输出数据。

谢谢,

c++ cout process flush

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

造成这种差异的原因......从C++到C?

我想知道为什么会一直这样...... !! 我在c中编写了两个程序,在c ++中编写了另一个程序.两者都执行相同的操作.即打印1到2000000之间的数字.此外,我在执行开始时设置计时器..并且在打印之后还打印所有经过的时间.c ++程序所用的时间总是大于交流程序.我觉得时间差异很大.我很想知道这是什么原因.. ???? ..

这是两个程序

//iotest.c

#include<stdio.h>
#include<time.h>

clock_t start=clock();

int main()
{
for(int i=0;i<2000000;i++)

printf("%d\n",i);

printf("Time Elapsed: %f\n",((double)clock()-start)/CLOCKS_PER_SEC);

return 0;

}
Run Code Online (Sandbox Code Playgroud)

//iotest.cpp

#include<iostream>

#include<time.h>

using namespace std;

clock_t start=clock();

int main()
{
    for(int i=0;i<2000000;i++)

    cout<<i<<endl;

    cout<<"Time elapsed "<<((double)clock()-start)/CLOCKS_PER_SEC<<endl;

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

// ver C++ 4.3.2通过发出命令编译c程序

g ++ iotest.c

执行给出

1

.

.

2000000

经过的时间:5.410000(并不总是相同..)

执行第二个程序

1

.

.

2000000

时间流逝:5.81(并非总是相同..)

c c++

5
推荐指数
3
解决办法
585
查看次数

std :: cout << x之间的差异是什么?和std :: cout << x << std :: endl;?

我是编程的新手,我昨天开始自学,我已经得到了所有东西,但老实说,我不明白它们之间的区别

std::cout << x;
Run Code Online (Sandbox Code Playgroud)

std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)

没有人向我解释这一点,我要求保持安全.

c++

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

C++混合printf和cout

可能重复:
混合cout和printf以获得更快的输出

我正在使用Microsoft Visual Studio 6.0.

以下程序,

#include "stdafx.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
printf("a");
printf("b");
printf("c");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生"abc".

而以下方案,

#include "stdafx.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
printf("a");
cout<<"b";
printf("c");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生"acb".

有什么问题?我不能在同一个程序中混合使用cout和printf吗?

c++ printf cout

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

哪个更快,哪个更灵活:printf或cout?

可能重复:
在C++ cin或printf中printf vs cout

我一直想知道printf和cout ..哪一个最终更快,并且它也是最灵活的(即可以打印一系列变量,输出可以格式化)?

PS我知道这看起来类似于C++中的'printf'和'cout',但我并不是真的在问同样的事情.

c++ printf cout

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

这个char数组到std :: string转换有什么问题?

我正在尝试将一个char数组转换为一个数组std::string,但我只能在数据中得到喋喋不休std::string.怎么了?

char char_buff[40];
sprintf_s(char_buff, 40, "test" );
printf("%s\n", char_buff); // prints "test"

std::string str(char_buff);
printf("%s\n", str); // prints random nonsense
Run Code Online (Sandbox Code Playgroud)

c++ string

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

C++中的动态内存点

我试图用C++编写代码,从文件读取,一系列点,将其存储在动态数组中,然后打印回来.

这是我给出的规范:

"我们希望利用我们可以使用动态内存的事实,因此我们不是根据我们的估计在开始时分配足够大的内存量,而是实现以下算法:

最初,分配的内存非常少.

在循环的每次迭代中(从文件读取并存储到动态数组中),我们跟踪:

  • 数组最大大小(分配的内存).
  • 数组中的元素数.

当由于新插入而导致元素数量大于数组最大大小时,内存重新分配需要按如下方式进行:

  • 分配另一个具有更大最大大小的动态数组.
  • 将前一个数组中的所有元素复制到新数组中.
  • 释放为前一个阵列分配的内存区域.
  • 获取指向前一个数组的指针以指向新数组.
  • 在数组末尾添加新项.这就是我的问题所在.

从我下面的代码中,我认为其他一切都很好但是最后一个要求,即在数组末尾添加新项目.

当数组Max_Size超过文件的元素数时,代码工作正常,但是当我尝试扩展num_elements时,结果是文件中的额外数字只保存为零

.

另外,分配还不允许使用向量.对不起,我忘了提这个,我是stackoverflow的新手,有点编程.

请帮忙

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

struct point {  
    double x;
    double y;
};

int main () {

    ifstream inputfile;

    inputfile.open("datainput.txt");

    if(!inputfile.is_open()){
    cout << "could not open file" << endl;
        exit(EXIT_FAILURE);
    }

    //initially very little memory is allocated
    int Max_Size = 10;
    int num_elements = 0;
    point *pp = new point[Max_Size];


    //read from file and store in dynamic array …
Run Code Online (Sandbox Code Playgroud)

c++ arrays algorithm memory-management dynamic-memory-allocation

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