小编ein*_*ica的帖子

迭代器或 std::iota 与常规 C++ 数组?

有没有办法达到与此相同的效果,

std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
Run Code Online (Sandbox Code Playgroud)

与常规int a[]

或者,以下是唯一的解决方法:

for (iterator itr = begin; itr != end; ++itr)
    /* ... visit *itr here ... */
Run Code Online (Sandbox Code Playgroud)

c++ iteration foreach iota c++11

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

如何转义bash数组中的所有字符串?

我有一些 bash 数组arr_a,我想获得一个数组,arr_b其元素是对 .bash 的相应元素进行转义的结果arr_a

因此如果

arr_a=("foo\"" "bar")
Run Code Online (Sandbox Code Playgroud)

然后arr_a[0]包含foo"arr_a[1]包含bar;我想arr_b[0]包含foo\"arr_b[1]包含bar.

我知道我可以用printf %q "$the_string". 问题是,如果我在函数或子shell 或其他东西中执行此操作,我会通过将转义字符串打印到函数的输出流来“丢失”转义。这样做的正确方法是什么?

arrays bash escaping

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

为什么`auto` 不采用其初始化表达式的constexpr'ness?

为什么用auto关键字定义变量不带有constexpr用于初始化它的表达式的“性质”?


例如,请考虑以下代码:

#include <string_view>

constexpr std::string_view f() { return "hello"; }

static constexpr std::string_view g() {
    constexpr auto x = f(); // (*)
    return x.substr(1, 3);
}

int foo() { return g().length(); }
Run Code Online (Sandbox Code Playgroud)

使用 GCC 10.2 和--std=c++20 -fsanitize=undefined -O3编译为:

foo():
        mov     eax, 3
        ret
Run Code Online (Sandbox Code Playgroud)

但是,如果我们删除 (*) 行上的 constexpr,我们将得到一个 27 行的程序,其中包含一堆指针、一个长字符串常量等。

笔记:

  • 我将此问题标记为 C++20,但我没有理由相信这种行为与 C++11 不同。
  • 这个问题与示例无关,而是关于autowrt constexprness的一般行为。该示例只是表明 GCC 不会将 x 视为constexpr我们没有明确告诉它。

c++ type-inference constexpr auto c++20

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

为什么 std::sort 不适用于我的 comp 函数?

有人可以解释为什么 main 中的最后一个排序函数不起作用而第一个排序函数正常工作。

程序构建没有错误。这是代码:

#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>

using namespace std;

bool comp (int a, int b) {
    if (a % 2 == 0) { return 1; }
    else { return 0; }
}

int main()  {
    int n; cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    sort(arr, arr+n, comp);
    int pos;
    for (int i = 0; i < n; i++) {
        if (arr[i] % …
Run Code Online (Sandbox Code Playgroud)

c++ sorting comparison

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

如何比较两个结构体实例?

我的程序中出现以下错误,用于将两个日期与 tda 日期进行比较。该操作必须返回短语“相同”或“不同”。

#include<iostream>
//#include<stdio.h>
#include<string.h> 
using namespace std;
struct tfecha{
    int dia;
    int mes;
    int anio;
};
int main()
{
    tfecha f1,f2;
    cout<<"Ingrese primera fecha:"<<endl;
    cin>>f1.dia;
    cin>>f1.mes;
    cin>>f1.anio;

    cout<<"Ingrese segunda fecha:"<<endl;
    cin>>f2.dia;
    cin>>f2.mes;
    cin>>f2.anio;

    if(strcmp(f1==f2){
      cout<<"Las fechas son iguales:"<<endl;
    }else
    {
       cout<<"Las fechas son diferentes:"<<endl;
    }
 }
Run Code Online (Sandbox Code Playgroud)

[错误] 与“operator ==”不匹配(操作数类型为“tfecha”和“tfecha”)

c++ comparison comparison-operators

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

C++ 中的整数上溢和下溢

任何人都可以解释为什么会发生这种情况吗?:

int a = 2147483647;
cout <<"Product = " << a * a << endl; // output = 1 (why?)
int b = -2147483648;
cout <<"Product = " << b * b << endl; // output = 0 (why?)
Run Code Online (Sandbox Code Playgroud)

此外,当我们为 'short' 编写类似的内容时,编译器将乘积视为整数类型,尽管变量被初始化为短类型,例如:

short x = 32767;
cout <<"Product = " << x * x << endl; // Product = 1073676289
short y = -32768;
cout <<"Product = " << y * y << endl;// Product = 1073741824
Run Code Online (Sandbox Code Playgroud)

c++ integer integer-overflow undefined-behavior modular-arithmetic

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

Cuda Tensor Cores:NumBlocks 和 ThreadsPerBlock 的作用是什么?

我想知道 NumBlocks 和 ThreadsPerBlock 对这个简单的矩阵乘法例程的影响是什么

__global__ void wmma_matrix_mult(half *a, half *b, half *out) {

   // Declare the fragments
   wmma::fragment<wmma::matrix_a, M, N, K, half, wmma::row_major> a_frag;
   wmma::fragment<wmma::matrix_b, M, N, K, half, wmma::row_major> b_frag;
   wmma::fragment<wmma::accumulator, M, N, K, half> c_frag;

   // Initialize the output to zero
   wmma::fill_fragment(c_frag, 0.0f);

   // Load the inputs
   wmma::load_matrix_sync(a_frag, a, N);
   wmma::load_matrix_sync(b_frag, b, N);

   // Perform the matrix multiplication
   wmma::mma_sync(c_frag, a_frag, b_frag, c_frag);

   // Store the output
   wmma::store_matrix_sync(out, c_frag, N, wmma::mem_row_major);
}
Run Code Online (Sandbox Code Playgroud)

呼唤

`wmma_matrix_mult<<1, 1>>`: Incorrect
`wmma_matrix_mult<<1, 2>>`: …
Run Code Online (Sandbox Code Playgroud)

cuda matrix-multiplication cuda-wmma

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

为什么cudaFree不需要数据结构的地址?

我对工作方式有疑问cudaFree。在下面的代码中,为了在设备上分配数组,cudaMalloc需要数组的地址。这是通过使用&array_d.

int *array_d;
cudaMalloc((void**)&array_d, sizeof(int) * 100);
cudaFree(array_d);
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,当我们想要释放内存时,我们cudaFree还必须传递数组地址。否则,它如何知道哪部分内存必须被释放?

c memory-management cuda

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

在我的基本向量类中使用数组作为模板参数

来自PHP背景,我正在尝试学习C++,因为我发现它是一种有趣的语言.作为一种练习,我想使用模板创建一个简单的Vector类,这并不难.但是,我遇到了一个问题.

我创建了以下模板类:

template <typename T>
class Vector
{
public:
    Vector(int length);
    ~Vector(void);
    int getLength();

    T& operator[] (const int index);

private:
    T *_items;
    int _count;
};


template <typename T>
Vector<T>::Vector(int length)
{
    _items = new T[length];
    _count = length;
}

template <typename T>
T& Vector<T>::operator[]( const int index )
{
    if (index >= getLength() || index < 0)
        throw exception("Array out of bounds.");
    return _items[index];
}
Run Code Online (Sandbox Code Playgroud)

所有功能都已实现,但它们与我的问题无关,所以我没有在这里复制它们.

这个类按预期工作,但有一个例外:如果我想创建一个数组向量,它就不起作用.例如:

Vector<int[2]> someVector(5);
Run Code Online (Sandbox Code Playgroud)

我显然想要的是,vector类的_items属性将是一个int [5] [2].但是,由于编译器用'int [2]'替换'T',_items属性将是int [2] [5](或者至少,这是我从调试中理解的,如果我错了请纠正我).结果,[]运算符不再正常工作,因此整个类对于数组来说是无用的.

有没有办法解决这个问题,所以这个类也适用于数组?如果那是不可能的,有没有办法阻止这个类用数组初始化?

编辑:感谢您到目前为止的所有回复.但是,我的问题可能并不完全清楚.首先,我创建了这个类来习惯c ++,我知道有一个std :: vector类,我现在也更好地使用向量向量.那不是问题所在.我只想更好地理解模板,一般来说是c …

c++ arrays templates vector

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

在CUDA计算能力3.5+中,所有线程(在SM上)是否真的每个都有255个寄存器?

我正在查看不同CUDA计算功能的以下最大值:

  1. 每个线程注册
  2. 每个寄存器(对称多处理器)
  3. 每个SM的线程

如出现在这里.嗯,它看起来像CUDA 3.5及以上,至少1 x 3> 2.这意味着虽然单个线程最多可以使用255个寄存器,但如果有太多线程尝试这样做,则会发生寄存器溢出.我的解释是否正确?或者说图1.不是真的正确,每个线程真的有64个寄存器吗?

cuda gpu gpgpu

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