小编ten*_*our的帖子

随机数生成器,C++

我知道在C++中生成随机数有一些限制(可能是非均匀的).如何生成1到14620之间的数字?

谢谢.

c++ random

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

如何在循环中使用linq?

让我们从一些源数据开始查询:

int[] someData = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

在运行以下代码之后,事情按照我的预期运行:a包含2个可归结为12从中拉出的元素someData.

List<IEnumerable<int>> a = new List<IEnumerable<int>>();
a.Add(someData.Where(n => n == 1));
a.Add(someData.Where(n => n == 2));
Run Code Online (Sandbox Code Playgroud)

但是下一个代码只在循环中执行完全相同的操作,并不能按预期工作.当此代码完成时,b包含2个元素,但它们都是相同的 - 指向2.在第二个循环中,它修改了第一个元素b.

List<IEnumerable<int>> b = new List<IEnumerable<int>>();
for (int i = 1; i <= 2; ++i)
{
    b.Add(someData.Where(n => n == i));
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何使循环版本像第一个版本一样?

c# linq

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

为什么 std::array&lt;T,N&gt;::begin() 自 C++17 以来是 constexpr?

从 C++17 开始,std::array<T,N>::begin()是 constexpr:

constexpr iterator begin() noexcept;
Run Code Online (Sandbox Code Playgroud)

但是如何begin在编译时知道返回值呢?例如:

int main() {
  auto p = std::make_unique<std::array<int,2>>();
  auto it = p->begin();
}
Run Code Online (Sandbox Code Playgroud)

是完全合法的代码(虽然可能有点无用)。底层数组的开始以及迭代器取决于 malloc 的地址。

我有一种感觉,我对什么是误解,constexpr因为我看不到任何非静态成员函数可能是什么constexpr,特别是如果它(可传递地)访问数据成员。

c++ compile-time constexpr c++17

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

序列化双精度的最佳方法

我正在将值序列化为XML文档.当我序列化时double,我想确保我没有失去任何精确度,并且文化不会干扰.或任何其他我没有想到的"陷阱".

同样地DateTime,我ToBinary()用来获得一个非常安全的序列化值.

那么,double在C#中序列化/反序列化值的最佳方法是什么?

c# serialization

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

你可以用 GLSL ES 中的整数做什么?

在 GLSL ES 2.0 中,您可以使用整数做的事情似乎非常有限。

例如:

  • 不支持按位运算。
  • 似乎没有内部函数接受int类型

所以,似乎你真正能用整数做的唯一一件事是:

  • 将整数分配给整数
  • 按索引访问数组元素
  • 基本算术 ( -, +, *, /),但仅限于其他整数之间。不存在允许您将floatandint相加的运算符。
  • 将它们相互比较。
  • 将它们转换为其他类型
  • vec 构造函数允许你传递整数

真的是这样吗?除了构造函数之外,是否有任何int参数的内在函数vec?是否有任何可以做的之间的操作floatint

shader opengl-es glsl

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

如何防止在argv中丢失双引号?

好的,我知道我可以像这样循环:

for (int i=1; i<=argc-1;i++) {
  cout << argv[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

但这种方式会丢失双引号,即字符串"something here"被视为args数组的一个元素,并且引号丢失.

好吧,我知道如果参数里面有空格,我可以假设引号,但无论是否有空格,引号总是丢失.

c++ console mingw

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

如何使用索引初始化数组元素

我想找到一种用索引初始化 C++ 数组元素的优雅方法。我有很多类似这样的代码:

static constexpr size_t ELEMENT_COUNT = 8;
MyObject x[ELEMENT_COUNT] = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}};
Run Code Online (Sandbox Code Playgroud)

哪里MyObject有效,

struct MyObject {
    size_t mMyIndex;
    MyObject(size_t myIndex) : mMyIndex(myIndex) {}
};
Run Code Online (Sandbox Code Playgroud)

问题应该已经很清楚了:当ELEMENT_COUNT发生变化时,我必须调整初始化列表,这感觉非常不符合 C++。如果ELEMENT_COUNT是,比如说,,1000这就变得不切实际了。

在 C++ 中可能有类似以下内容吗?:

MyObject mObjects[ELEMENT_COUNT] = initialize_array_with_indices<ELEMENT_COUNT>();
Run Code Online (Sandbox Code Playgroud)

initialize_array_with_indices<N>()std 库中是否存在这样的函数?是否可以?使用std::array<>是一种选择,如果这能让我走得更远的话。

c++ arrays

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

如何将CString转换为ofstream?

我有一些CString变量,我希望输出到ofstream,但我似乎无法弄清楚如何这样做.这是一些示例代码.

我在VS 2005中启用了unicode

码:

  ofstream ofile;
  CString str = "some text";

  ofile.open(filepath);
   ofile << str; // doesn't work, gives me some hex value such as 00C8F1D8 instead
    ofile << str.GetBuffer(str.GetLength()) << endl; // same as above
     ofile << (LPCTSTR)str << endl; // same as above

   // try copying CString to char array
  char strary[64];
  wcscpy_s(strary, str.GetBuffer()); // strary contents are correctly copied
  ofile << strary << endl ; // same hex value problem again!
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

c++

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

不使用静态方法创建c ++ DLL

我正在用C++创建一个DLL.这是一个例子:

namespace MathFuncs
{
  class MyMathFuncs
  {
    public:
        // Returns a + b
        static __declspec(dllexport) double Add(double a, double b);

        // Returns a - b
        static __declspec(dllexport) double Subtract(double a, double b);

        // Returns a * b
        static __declspec(dllexport) double Multiply(double a, double b);

        // Returns a / b
        // Throws DivideByZeroException if b is 0
        static __declspec(dllexport) double Divide(double a, double b);
    };
}
Run Code Online (Sandbox Code Playgroud)

所有方法都是静态的,静态方法有很多限制,所以我的问题是如何在没有静态方法的情况下实现相同的方法?我总是需要在DLL中使用静态方法吗?我想在C#和IOS应用程序中导入此DLL.

c# c++ dll ios

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

将 uint8* 转换为 uint32* 是如何工作的?

这里有一个成员函数

uint8* CIwTexture::GetTexels() const;
Run Code Online (Sandbox Code Playgroud)

uint32*例如,如果返回值转换为,转换在这里如何工作?如果返回值只是 8 位,如何将指向 8 位数据的指针转换为 32 位?

c++

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

标签 统计

c++ ×7

c# ×3

arrays ×1

c++17 ×1

compile-time ×1

console ×1

constexpr ×1

dll ×1

glsl ×1

ios ×1

linq ×1

mingw ×1

opengl-es ×1

random ×1

serialization ×1

shader ×1