【问题标题】:2D Std::vector of a given class给定类的 2D Std::vector
【发布时间】:2017-10-25 13:41:12
【问题描述】:

我正在尝试使用向量将某些数据的 x 和 y 坐标存储在我的向量中。我认为以下方法可行,但事实并非如此。我花了很多时间寻找希望让它工作但徒劳无功。我感谢任何帮助。

class A {

public:
  A(size_t x, size_t y); //ctor

  };

如果我想创建一个类型为 A 类的向量,那么 2D,为什么是

 std::vector<A> vec(10); not working? 

void count(size_t x, size_t y) {
    vec.at(x,y);
}

   ERROR: error: no matching function for call to ‘std::vector<Board>::at(size_t, size_t&)
   note:   candidate expects 1 argument, 2 provided

既然 A 类的构造函数有 2 个变量,那么@t 我的 A 类型向量是否也应该采用 2 个变量? 如果不是,那么获取 A 类二维向量的正确方法是什么,以便我可以在 x,y 处调用 .at() 函数并获取其中存储的任何内容?

【问题讨论】:

  • std::vector 需要包含的类项的默认构造函数。
  • 你可以只拥有一个 std::pair 的向量,而不是自己滚动。
  • 向量必须是 A 类型,这将如何与 std::pair 一起使用? std::vector<:pair>> 不是对,并且 std::vector<:pair a>> vec2;需要两对(x,y),对吧?
  • @InfoGirl 我的印象是你只是一组size_t 变量的向量? std::vector&lt;std::pair&lt;size_t, size_t&gt;&gt; vec;.
  • 还有vec.at(x,y);当心,逗号操作符不是你想的那样。

标签: c++ stdvector


【解决方案1】:

这个向量重载:

std::vector<A> vec(10);

通过调用A 的默认构造函数来制作10 个A 类型的副本。由于您没有提供默认构造函数,因此会发生错误。提供默认构造函数:

class A {
public:
    A() = default;
};
int main() {
    std::vector<A> v(10);
}

或使用适当的构造函数作为第二个参数:

class A {
public:
    A(size_t x, size_t y) {
    // your code
    }
};
int main() {
    std::vector<A> v(10, A(1, 2));
}

话虽如此,不要混淆向量的向量:

std::vector<std::vector<T>> v;

使用带有两个参数的简单构造函数或具有两个数据成员的简单类。

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多