在结构中使用C ++向量有什么问题吗?

时间:2010-07-11 17:53:23

标签: c++ vector structure

好的,我来自vb.net到c ++。我试图在结构中使用向量,但编译器对我大喊大叫。当前的陈述有什么问题?

#include <vector>

struct FactorSet
{
 vector<long long> UpperFactor(0);
 vector<long long> LowerFactor(0);
};

输出错误(Visual Studio 2008):

错误1错误C2059:语法错误:'常数'

我冒昧地猜测这是我对矢量究竟是什么缺乏了解。在我看来它是一个对象,虽然我认为它的最新名称是模板。像字符串这样的其他对象似乎没有问题。我还假设这也扩展到类定义,因为结构和类是如此相似。

2 个答案:

答案 0 :(得分:6)

你想:

#include <vector>

struct FactorSet
{
 std::vector<long long> UpperFactor;
 std::vector<long long> LowerFactor;
};

虽然你可能也有很长的问题,因为这目前不是C ++的一部分。

如果你真的想给向量一个大小,你需要通过结构构造函数来做到这一点:

struct FactorSet
{
 std::vector<long long> UpperFactor;
 std::vector<long long> LowerFactor;

 FactorSet() : UpperFactor(42), LowerFactor(42) {}
};

现在当你说:

FactorSet f;

f中的向量都将具有42的大小。

关于矢量究竟是什么,它是一个非常类似于字符串的类,除了矢量的情况你必须说它包含什么类型的东西。所以

vector <char> s;

非常相似(但不完全相同):

string s;

答案 1 :(得分:2)

是的,您可以在结构或类中使用向量。问题是在C ++中,你无法初始化内联成员;你需要在构造函数中进行初始化。例如:'

class FactorSet {
   public:
       FactorSet() : UpperFactor(0), LowerFactor(0) {}
       // ...
   private:
       std::vector<int64_t> UpperFactor;
       std::vector<int64_t> LowerFactor; 
};

只是一些注释...默认情况下,vector将使用零元素构造,因此不必以这种方式显式构造它(事实上,这样做可能比使用默认构造函数稍慢)。此外,类型long long目前是非标准的。考虑使用int64_t中定义的stdint.h(以及更方便地,在标题boost/cstdint.hpp中)。