小编Joe*_*oeG的帖子

_bstr_t到UTF-8可能吗?

我有一个_bstr_t包含日文文本的字符串.我想将此字符串转换为UTF-8字符串,该字符串定义为a char *.

我可以将_bstr_t字符串转换为char *(UTF-8)字符串而不会丢失日文字符吗?

c++ com atl bstr visual-c++

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

如何轻松计时一块C#代码?

我需要一种简单的方法(如果可能的话,紧凑)在计算时间时执行一个C#块.与此C++代码类似的东西:

elapsed = time_call([&] 
   {
      for_each (a.begin(), a.end(), [&](int n) {
         results1.push_back(make_tuple(n, fibonacci(n)));
      });
   });   
Run Code Online (Sandbox Code Playgroud)

其中time_call是:

// Calls the provided work function and returns the number of milliseconds 
// that it takes to call that function.
template <class Function>
__int64 time_call(Function&& f)
{
   __int64 begin = GetTickCount();
   f();
   return GetTickCount() - begin;
}
Run Code Online (Sandbox Code Playgroud)

我知道秒表的方式......更紧凑吗?

c# c++

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

Visual C++中的浮点精度

HI,

我试图使用Jonathan Richard Shewchuk的计算几何的 强大谓词.

我不是程序员,所以我甚至不确定我在说什么,我可能会做一些基本的错误.

关键是谓词应该允许具有自适应浮点精度的精确算法.在我的电脑上:华硕pro31/S(Core Due Centrino处理器)它们无法正常工作.问题可能在于我的计算机可能会使用与Shewchuk使用的浮点精度冲突的一些改进.作者说:

/* On some machines, the exact arithmetic routines might be defeated by the  */
/*   use of internal extended precision floating-point registers.  Sometimes */
/*   this problem can be fixed by defining certain values to be volatile,    */
/*   thus forcing them to be stored to memory and rounded off.  This isn't   */
/*   a great solution, though, as it slows the arithmetic down.              */
Run Code Online (Sandbox Code Playgroud)

现在我想知道的是,有一种方法,可能是一些编译器选项,来关闭内部扩展精度浮点寄存器.

我非常感谢你的帮助

c++ math floating-point floating-accuracy visual-c++

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

使用C++比较巨大的文件

我有两个大文本文件,每个文件有超过1000万行.如何使用C++比较文件并在文件中获取不同的行.

我尝试将一个文件加载到内存中并对内存进行排序,并使用二叉​​树逻辑来比较文件.它比较并给了我20秒的结果.但它消耗更多的内存.(文本文件大约500 MB).

我想比较两个文件而不消耗更多内存,良好的性能和对硬盘的影响最小.

c++ diff file

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

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

C++ STL容器中的多态性

我想知道这个问题是否存在优雅的解决方案.

假设如下:

class Base {
  private:
    int data;
  protected:
    Base(int data) : data(data) { }
    int getData() const { return data; }
    virtual bool someOp() = 0;
}

class Derived1 : public Base {
  private:
    int data2;
  public:
    Derived1(int data, int data2) : Base(data), data2(data2) { }
    int getData2() const { return data2; }
    bool someOp() override { /* something */ }
}

class Derived2 : public Base {
  private:
    float data2;
  public:
    Derived1(int data, float data2) : Base(data), data2(data2) …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism stl c++11

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

关于循环速度的问题

我有以下两个循环:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;
int main(){

    int start=clock();
    for (int i=0;i<100;i++)
        cout<<i<<" "<<endl;
    cout<<clock()-start<<"\n"<<endl;
    cout<<"\n";

    int start1=clock();
    for (int j=0;j<100;++j)
        cout<<j<<" "<<endl;
    cout<<"\n";
    cout<<clock()-start1<<" \n "<<endl;

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

我跑了三次.在前两次运行中,第二次循环最快,但在第三次运行时,第一次循环最快.这是什么意思?哪个更好?这取决于具体情况吗?

c++ micro-optimization

5
推荐指数
2
解决办法
423
查看次数

如何在C中将简单的匿名函数作为参数传递

我确信之前已经提出了这个问题的一些变体,但所有其他类似的关于SO的问题似乎要复杂得多,涉及传递数组和其他形式的数据.我的场景更简单,所以我希望有一个简单/优雅的解决方案.

有没有办法可以创建一个匿名函数,或者将一行代码作为函数指针传递给另一个函数?

就我而言,我有一系列不同的操作.在每行代码之前和之后,我想要完成的任务永远不会改变.我想编写一个函数,它将函数指针作为参数并以必要的顺序执行所有代码,而不是复制开始代码和结束代码.

我的问题是,为每个操作定义30个函数是不值得的,因为它们都是一行代码.如果我无法创建匿名函数,有没有办法可以简化我的C代码?

如果我的要求不完全清楚.这里有一些伪代码用于澄清.我的代码比这更有意义,但下面的代码得到了相应的点.

void Tests()
{
  //Step #1
  printf("This is the beginning, always constant.");
  something_unique = a_var * 42;  //This is the line I'd like to pass as an anon-function.
  printf("End code, never changes");
  a_var++;

  //Step #2
  printf("This is the beginning, always constant.");
  a_diff_var = "arbitrary";  //This is the line I'd like to pass as an anon-function.
  printf("End code, never changes");
  a_var++;

  ...
  ...

  //Step #30
  printf("This is the beginning, always constant.");
  var_30 = "Yup, still executing the …
Run Code Online (Sandbox Code Playgroud)

c

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

为什么构造函数在C++中调用了两次?

在此代码中,构造函数被调用两次.

我该如何避免?

如果我取消注释默认构造函数代码块,那么代码不会给出令人满意的输出.

而且我也想要基于条件的模板实例化,所以我使用了void指针.

#include<iostream.h>
template<class Type>
class Data{
      public:
      Type val;
      Data(Type v){
                cout<<"In Constructor Param";
                val = v;
      }
      Data(){
             //  cout<<"In Constructor Defa";  uncommnet this line
      }
      ~Data(){}
};
int main(){
    Data<void *> obj;
    obj = new Data<float>(31.34f);
    cout<<*(float*)obj.val;
}
Run Code Online (Sandbox Code Playgroud)

输出:

In Constructor Param
In Constructor Param
31.34
Run Code Online (Sandbox Code Playgroud)

谢谢你的参与.

c++ templates

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

std :: vector中的内存泄漏代表2D数据

我编写了一个简单的模板化Matrix类,用于操作数据基质的主应用程序.截断的Matrix代码是:

template <typename T> 
class Matrix{
   private:
      std::vector<T> matrixRepresentation;
      bool transposed;
  public: 
  Matrix(int r, int c);
  int maxRows;
  int maxCols;
  void setMatrixValue(int row, int col, T val);
  T getMatrixValue(int row, int col);
};

template <typename T>
Matrix<T>::Matrix(int r, int c){
   maxRows = r;
   maxCols = c;
   matrixRepresentation.resize((r+1)*(c+1));
}   

template <typename T>
void Matrix<T>::setMatrixValue(int row, int col, T val){
   matrixRepresentation[row + col*maxCols] = val;
}

template <typename T>
T Matrix<T>::getMatrixValue(int row, int col){
   return matrixRepresentation[row + col*maxCols];
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只是将2D矩阵表示为向量,并提供包装方法来隐藏该事实.即使我将堆栈变量matrixRepresentation调整为

(r+1)(c+1)
Run Code Online (Sandbox Code Playgroud)

我最后在代码中遇到了内存损坏问题,valgrind告诉我以下内容: …

c++ valgrind memory-leaks

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