c++ - 指向包含指向 vector 指针的结构的 vector

标签 c++ pointers vector struct

private:
  struct info{
    int size = 0;
    int key = 0;
    int capacity = 1;
    std::vector<int*> *value = new std::vector<int*>(capacity);
  };

  int keyCapacity_;
  int size_;
  std::vector<info*> *keys_;

在函数中...

//some code
keys_ = new std::vector<info*>(keyCapacity_);
//some code
(*keys_)[size_] = new info;
(*keys_)[size_]->(*value)[size] = inputValue; //getting error on this line
(*keys_)[size_]->size += 1;
(*keys_)[size_]->key = key;

我有一个指向结构信息 vector 的指针。然后在 info 中有一个指向将保存值的 vector 的指针。可能会输入非常大量的数据,并且程序会根据需要调整 vector 的大小。当前输入值被添加到 vector 上的第一个开放点,即 size_。在我上面确定的行中,我收到了一个错误:

a3.hpp:67:20: error: expected unqualified-id before ‘(’ token
   (*keys_)[size_]->(*value)[size] = value;
                ^
a3.hpp:67:22: error: invalid type argument of unary ‘*’ (have ‘int’)
   (*keys_)[size_]->(*value)[size] = value;

如何访问此 vector 以更改值?

最佳答案

好吧,*value 不在此上下文中。它在括号中,因此将单独评估。要获得值(value),您需要:

(*keys_)[size_]->value

然后你想取消引用:

 *((*keys_)[size_]->value)

额外的一对括号可能不是必需的,但它使事情变得清晰。然后你想索引:

(*((*keys_)[size_]->value))[size]

我假设 size_size 是正确的,不同的索引。小心你的命名。这种相似性很容易让您感到困惑。

作为旁注,请务必意识到使用 new 几乎从来不是您想要在现代 C++ 中执行的操作。您可能希望改用智能指针。

关于c++ - 指向包含指向 vector 指针的结构的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49375641/

相关文章:

c++ - Typedef 指向 C++ 中同名指针的结构

c - 结构体中的指针值发生变化而不重新分配

c++ - EASTL vector <vector <int >>是否连续

c++ - 添加两个整数的可变参数模板列表

c++ - 在 Boost Phoenix 表达式中转换函数体

c++ - Eclipse CDT 自定义编译器错误解析插件

ios - 双指针在 Objective-C 中是什么意思?

c++ - 我应该在我的代码中使用 std::vector::at()

c++ - : Expected constructor, 析构函数错误, '<' token 之前的类型转换

c++ - C++ 中的模板和映射