当前位置: 首页 > 知识库问答 >
问题:

标准::向量元素中的常量引用

别开诚
2023-03-14

它只是我的编译器,还是禁止在std::vector元素中使用cons引用。考虑以下结构:

struct Y
{
  const int & x;

  Y(const int & p_x):
        x(p_x)
  {
  }
};

现在,当我尝试将这样的对象推到向量上时:

std::vector<Y> yv;
int x = 5;
Y y(x);
yv.push_back(y);

我收到编译器错误:“错误:非静态引用成员'const int

共有3个答案

吕向荣
2023-03-14

不,因为不能指定常量引用,STL容器使用指定来移动项目。

您最好使用shared_ptr::std::,具体取决于您的环境)或原始指针。

曹超
2023-03-14

您可能需要检查

std::reference_wrapper

可与C 11一起使用

葛季萌
2023-03-14

vector元素必须是可赋值的。根据第23.2.4节C标准的类模板向量:

…存储的对象应满足可分配的要求。

 类似资料:
  • 我想从包含每个组中元素数量的向量创建一个包含每个元素的组标识符的向量。 例子: 我正在寻找一个向量如下: 我找到了一个涉及循环的解决方案: 但这看起来不太优雅。欢迎提出任何改进建议。

  • 这应该很容易,但我一直在撞我的头。 我有数字向量 我有一个数值向量v2。v2始终是v1的子集。 我想从v1中删除v2中的所有元素,但每个v2元素只删除一个(而且完全是一个)v1元素。 所需输出 如果我希望将保留在v1之外。使用很容易。 如果我希望将与v1保持一致。此外,也能起到作用。 如果我希望将与v1保持一致。现在返回。不是我想要的。 当答案输入时,我很可能会用头撞我的键盘,但现在我还没有得到最

  • 下面的代码为什么编译? std::move的文档说 执行此操作后,“移动自”范围中的元素仍将包含适当类型的有效值,但不一定与移动前的值相同。 所以这实际上可以改变对象foo2,即使它声明为const。为什么这样做有效?

  • 问题: 在OpenCl 1.2中,没有内置函数,如 我尝试过的: 所以我使用下面的代码(展开循环的预取内部部分) 将整数数组(int4 arr)的所有元素求和(减少)为一个长变量,与串行代码相比,其速度仅为0。如果它能启用SSE或AVX,速度会快得多。 还尝试了: 使用纯整数累加器将求和运算速度提高3倍,但整数溢出,因此我只能使用长变量。然后我尝试使用long4和long2变量作为 但它失败并锁定

  • 我创建了一个示例容器,它在内部存储在std::vector中。我希望能够用std::vector初始化容器。因此,我创建了一个构造函数,它采用std::initializer_list,还采用begin和end。 但我似乎不能这样初始化: 这里的问题是什么?我该怎么修复? 代码在这里:

  • 我在Matlab中有一个行向量x,它包含164372个组件。现在我想把这些元素分组到另一个向量y中,它必须包含52个分量。向量y的第一个元素必须是向量x的前164372/52=3161个元素的平均值,y的第二个元素必须是x的下一个3161个元素的平均值,以此类推。直到我取了向量x中所有52个元素的平均值,并将它们放在y中。 如何在Matlab中实现这一点?是否有一些内置函数允许我将某个索引中的元素

  • 我有一组向量,我需要用java编写算法,找到这个集合的最小元素。问题是,有些元素是无与伦比的。例如minset{(1,4,6),(3,2,5),(2,3,4),(5,4,6)} = {(1,4,6),(3,2,5),(2,3,4)}。对于最小元素集“minset”,以下内容成立:原始集的每个向量要么在“minset”中,要么在“minset”中

  • 我目前正试图通过改变算法来优化一些MATLAB/Octave代码,但不知道如何处理一些随机性。假设我有一个整数向量V,每个元素代表一些东西的计数,在我的例子中是光子。现在,我想随机选取一些“东西”,创建一个大小相同的新向量,但要调整计数。 以下是我目前的做法: 这是上面描述的一个相当简单的实现。但是它有一个明显的性能缺陷:函数创建一个向量(idxV),每个光子包含一个元素。所以如果我的V只有100