C++ 如何创建#定义以创建二维向量?

C++ 如何创建#定义以创建二维向量?,c++,vector,c-preprocessor,C++,Vector,C Preprocessor,是否可以使用执行以下操作的#define语句: 对于一个简单的向量,我可以这样做: #define dvec std::vector<double> dvec x1d(n) dvec2d x2d(n, std:vector<double>(m)) 当然,我可以做到: #define dvec std::vector<double> dvec x1d(n) dvec2d x2d(n, std:vector<double>(m)) dvec2d

是否可以使用执行以下操作的
#define
语句:

对于一个简单的向量,我可以这样做:

#define dvec std::vector<double>
dvec x1d(n)
dvec2d x2d(n, std:vector<double>(m))
当然,我可以做到:

#define dvec std::vector<double>
dvec x1d(n)
dvec2d x2d(n, std:vector<double>(m))
dvec2dx2d(n,标准:向量(m)) 每次我都想创建一个,但我不想在那里有额外的
std:vector
——如果我能有
dvec2dx2d(n,m)
,那会更整洁

编辑:为了澄清,我知道我可以创建一个函数来给我向量,或者一个typedef,这不是我想要的。使用这些函数的人将把
vector
插入其中,所以这就是他们需要的。但是我不想有大量的函数定义,因为里面有所有的定义。使用
#define dvec2d…
可以解决这个问题


现在,当我测试我的东西时,我需要创建2d向量。我知道我可以用
dvec2dmy2dvector(n,std::vector(m))
,但我想知道的是,是否有任何方法可以编写
#定义
,这样我就可以创建这样的人:
dvec2dmy2dvector(n,m)

而不是使用宏,你可以使用模板函数。您可以制作一个
make_2d_vector
函数,如:

template<typename T>
std::vector<std::vector<T>> make_2d_vector(std::size_t rows, std::size_t cols)
{
    return std::vector<std::vector<T>>(rows, std::vector<T>(cols));
}

您可以使用模板函数,而不是使用宏。您可以制作一个
make_2d_vector
函数,如:

template<typename T>
std::vector<std::vector<T>> make_2d_vector(std::size_t rows, std::size_t cols)
{
    return std::vector<std::vector<T>>(rows, std::vector<T>(cols));
}

您可以使用模板函数,而不是使用宏。您可以制作一个
make_2d_vector
函数,如:

template<typename T>
std::vector<std::vector<T>> make_2d_vector(std::size_t rows, std::size_t cols)
{
    return std::vector<std::vector<T>>(rows, std::vector<T>(cols));
}

您可以使用模板函数,而不是使用宏。您可以制作一个
make_2d_vector
函数,如:

template<typename T>
std::vector<std::vector<T>> make_2d_vector(std::size_t rows, std::size_t cols)
{
    return std::vector<std::vector<T>>(rows, std::vector<T>(cols));
}


改用
typedef
。宏是坏的,容易产生模糊的错误。你还需要一个参数化的宏,不是吗?我正在使用宏,这样我编写的函数在外部仍然可以使用
vector
,但我希望它在代码内部更干净。我不打算创建很多这样的函数,但我只是想知道我将如何做……如果
n
m
是变量,请使用内联函数。宏比宏干净得多。宏可以支持类似于
dvec2d(n,m,x2d)
的语法,变量名也作为宏参数给出。但是,您真的不想将宏用于这种目的!我会考虑增加你的问题:“或者没有宏,我怎么做呢?”使用<代码> TyBuffs会更好。宏是坏的,容易产生模糊的错误。你还需要一个参数化的宏,不是吗?我正在使用宏,这样我编写的函数在外部仍然可以使用
vector
,但我希望它在代码内部更干净。我不打算创建很多这样的函数,但我只是想知道我将如何做……如果
n
m
是变量,请使用内联函数。宏比宏干净得多。宏可以支持类似于
dvec2d(n,m,x2d)
的语法,变量名也作为宏参数给出。但是,您真的不想将宏用于这种目的!我会考虑增加你的问题:“或者没有宏,我怎么做呢?”使用<代码> TyBuffs会更好。宏是坏的,容易产生模糊的错误。你还需要一个参数化的宏,不是吗?我正在使用宏,这样我编写的函数在外部仍然可以使用
vector
,但我希望它在代码内部更干净。我不打算创建很多这样的函数,但我只是想知道我将如何做……如果
n
m
是变量,请使用内联函数。宏比宏干净得多。宏可以支持类似于
dvec2d(n,m,x2d)
的语法,变量名也作为宏参数给出。但是,您真的不想将宏用于这种目的!我会考虑增加你的问题:“或者没有宏,我怎么做呢?”使用<代码> TyBuffs会更好。宏是坏的,容易产生模糊的错误。你还需要一个参数化的宏,不是吗?我正在使用宏,这样我编写的函数在外部仍然可以使用
vector
,但我希望它在代码内部更干净。我不打算创建很多这样的函数,但我只是想知道我将如何做……如果
n
m
是变量,请使用内联函数。宏比宏干净得多。宏可以支持类似于
dvec2d(n,m,x2d)
的语法,变量名也作为宏参数给出。但是,您真的不想将宏用于这种目的!我会考虑增加你的问题:“或者没有宏,我怎么做呢?”使用<代码> TyBuffs会更好。@ HydTyPulf在旧编译器的情况下可以帮助。为什么不使用“vector2d”?@hyde,语法变得相当难看,“std::vector foo的实际难看之处是什么?”??尤其是当OP明确表示要使用该语法时?@hyde不,这是模板函数参数的工作:-P。。。如果我们谈论固定大小的东西,应该使用
std::array
而不是真正需要当前标准的
std::vector
。@πάνταῥεῖ 你的意思是
std::vector foo=make_2d_vector(5,10),我想。我认为那是相当丑陋的。YMMV.@hyde typedef在旧编译器的情况下可以提供帮助。为什么不使用“vector2d”?@hyde,语法变得相当难看,“std::vector foo的实际难看之处是什么?”??尤其是当OP明确表示要使用该语法时?@hyde不,这是模板函数参数的工作:-P。。。如果我们谈论固定大小的东西,应该使用
std::array
而不是真正需要当前标准的
std::vector
。@πάνταῥεῖ 你的意思是
std::vector foo=make_2d_vector(5,10),我想