小编Rak*_*111的帖子

"实时计算"是否适用于可变?

图形可以表示为邻接矩阵或邻接列表.我的Graph对象将图形表示为邻接矩阵.出于性能原因,除非有要求,否则我不会计算邻接表; 但是,一旦提出要求,我想保留清单(以避免重新建立).

是否适合制作邻接列表mutable,以便用户可以为其他const Graph对象生成邻接列表?我问,因为我不相信构建邻接矩阵会被视为"物理"而不是"逻辑"改变状态Graph.我也有一个adjacencyListBuilt方法,因此邻接列表的构建不是"不可见的"(参见https://isocpp.org/wiki/faq/const-correctness#mutable-data-members).

如果我理解正确,声明adjacencyList实例变量mutable将允许任何方法更新它.有没有办法只有buildAdjacencyList方法能够修改对象adjacencyList上的实例变量const

c++ const-correctness mutable

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

new似乎没有办法增长或缩减分配?

我在x轴上有n个点.在程序开始时,我正在分配x npoints.例如x = new double[npoints];

在模拟期间npoints可能会有所不同 如果npoints增加我想增加分配的内存.此外,如果npoints减少我想删除减少的内存.

c++ pointers memory-management allocation c++11

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

返回向量中struct结构的索引

我几乎阅读了通过谷歌发现的所有帖子,但它并没有帮助我...

我在一个类中有一个结构:

struct animation {
    int identifier;
    int another_variable;
};
Run Code Online (Sandbox Code Playgroud)

我将一堆这些结构存储在一个向量中:

static std::vector<animation> anims;
Run Code Online (Sandbox Code Playgroud)

现在,我需要根据字段标识符找到结构的索引(位置).

// This is what I found so far
int Animation::get_animation_index(int identifier) {        
    std::find(anims.begin(), anims.end(), identifier) - anims.begin();
 }
Run Code Online (Sandbox Code Playgroud)

我们的想法是获取向量索引anims [0] .. anims [xxx],其中存储了标识符为xx的结构.

我在一个循环中尝试了它,但后来我只能访问对象本身,而不是索引..

for (Animation::animation a : anims) {
    if (a.identifier == identifier) {
         // a is now the object, but I need the vector index..
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c++ struct vector

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

如何翻转阵列的一部分?

我需要翻转一个数组的一部分,保持其余部分不变.我有一个翻转整个数组的函数,但是......要使用它,我必须从我的数组中取出一部分,用函数翻转它并将其粘贴到它的位置.它不舒服而且不那么快.我需要一种工作速度非常快的方法.

例:

int array[10] = {1,2,3,4,5,6,7,8,9,10};
flip(array,2,6); //Flip the part between index 2 and 6
Run Code Online (Sandbox Code Playgroud)

之后,数组应如此:

{1,2,7,6,5,4,3,8,9,10}
Run Code Online (Sandbox Code Playgroud)

请帮忙,我需要一个非常快速的回答......

c++ arrays

0
推荐指数
2
解决办法
91
查看次数

用户定义的转换运算符不适用于引用

我有一个简单的原始类型包装器:

template <typename T>
class Scalar {
 public:
  explicit Scalar(T value) : value{value} {}

  Scalar(Scalar&& other) = default;
  Scalar& operator=(Scalar&& other) = default;
  Scalar(const Scalar& other) = default;
  Scalar& operator=(const Scalar& other) = default;

  template <typename U>
  explicit operator Scalar<U>() {
    return Scalar<U>{static_cast<U>(this->value)};
  }

  inline T getValue() const noexcept { return this->value; }
 private:
  T value;
};
Run Code Online (Sandbox Code Playgroud)

Casting Scalar值运行良好,但不知何故它无法用于引用,例如

auto a = Scalar<double>{2.54};
Scalar<int> b = static_cast<Scalar<int>>(a); // works

const auto& c = a;
Scalar<int> d = static_cast<Scalar<int>>(c); // fails …
Run Code Online (Sandbox Code Playgroud)

c++ templates casting reference user-defined

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

在三元运算符的else部分"什么都不做"?

添加到三元运算符的标准行是什么,以便在不满足条件时不执行任何操作?

例:

int a = 0;
a > 10 ? a = 5 : /*do nothing*/;
Run Code Online (Sandbox Code Playgroud)

使用a似乎可以解决问题,但我想知道是否有更普遍接受的方式.

c++ ternary-operator

0
推荐指数
2
解决办法
3269
查看次数

当作为参数传递给函数时,是否可以在表达式的内容被捕获之前捕获它?

假设我有一个简单的函数,它接受一个条件,然后返回一些东西.

例如:

bool is_even(int num){
   return (num % 2 == 0);
}
void Foo(conditional)
{
    if(conditional)
        std::cout << "Bar" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在函数计算之前将参数或表达式作为整体进入条件?

所以我的意思是,如果条件是is_even(2),我可以在评估之前获得表达式"is_even(2)",而不是真值(True)吗?

c++

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

无法修改数组中的对象队列

#include<iostream>
#include<deque>
struct testStr {
    std::deque<int> queue;
};

testStr arr[1] = {
    testStr()
};

testStr t = testStr();

void func() {
    testStr s = arr[0];
    s.queue.push_back(5);
    t.queue.push_back(6);
}

void func2() {
    std::cout << arr[0].queue.empty() << ' ';
    std::cout << t.queue.empty() << '\n';
}

int main() {
    func();
    func2();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

1 0
Run Code Online (Sandbox Code Playgroud)

我花了一个小时来追踪这个"错误"并且不明白为什么会出现这种行为以及如何克服它.感谢这里的任何和所有帮助.

c++ c++11

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

无法通过引用捕获lambda中的成员变量

请考虑以下代码段:

#include <map>
#include <string>
#include <set>
#include <algorithm>
#include <cmath>

using TargetsType = std::map<float, std::string>;
using TimesType = std::set<float>;

void foo (const TargetsType& targets,
          const TimesType& times)
{
    for (const auto& target : targets)
    {
        // fails to compile
        TimesType::const_iterator iter1 = std::find_if(times.begin(),
                                                       times.end(),
                                                       [&(target.first)](float item) 
                                                       {
                                                           return std::fabs(item - target.first) < 0.1f;
                                                       });

        // compiles OK
        TimesType::const_iterator iter2 = std::find_if(times.begin(),
                                                       times.end(),
                                                       [&](float item) 
                                                       {
                                                           return std::fabs(item - target.first) < 0.1f;
                                                       });
    }
}
Run Code Online (Sandbox Code Playgroud)

iter1无法编译的声明,出现以下错误:

error: expected ',' …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 c++14

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

为什么不初始化std :: vector <T>初始化T?

为什么A我初始化时没有调用默认构造函数std::vector

std::vector<A> vec; //Doesn't call constructor
vec.push_back(A(2)); //Calls constructor
Run Code Online (Sandbox Code Playgroud)

我不明白这个,请问有人详细解释一下吗?

c++ vector

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