std :: map类的find()函数效率如何?它是否遍历所有寻找密钥的元素,使其为O(n),或者是否在平衡树中,或者它是否使用哈希函数或什么?
C++ STL类std :: map使用二叉树实现O(log(n))查找.但是对于树,迭代器如何工作并不是很明显.++运算符在树结构中实际意味着什么?虽然"下一个元素"的概念在数组中有明显的实现,但对于我来说,它在树中并不那么明显.如何实现树迭代器?
C++(更具体地说,MinGW的g ++实现)变得混乱.我有一个数学Vector类,它包含任意数量的任意类型的元素.元素类型和元素数在编译时指定.
Vector类在其中一个构造函数和我称之为"resize"运算符之间变得混乱.调整大小运算符允许程序员将一个大小的向量转换为另一个任意大小的向量.如果投射向量具有比基本向量更多的元素,则用1填充.这是实施:
/*
* resize operator:
* T is the type of element the base vector holds
* N is the number of elements the base vector holds
* rN is the size of the new vector
*/
template<typename T, unsigned int N, unsigned int rN>
operator Vector<T, rN>() const
{
Vector<T, rN> resize;
for (unsigned int i = 0; i < rN; i++)
{
resize[i] = i < N ? this->elements[i] : 1;
}
return resize;
}
Run Code Online (Sandbox Code Playgroud)
vector类还有一个类型安全的可变参数构造函数,可以接受任意数量的元素组合(必须是T类型)和任意数量的Vectors(可以包含任意数量的元素,并且必须是T类型),所以只要添加到提供的向量中的元素数量的裸元素的数量等于构造向量包含的元素的数量. …
请考虑以下代码:
template<typename T>
constexpr inline T fma(T a, T b, T c)
{
return a * b + c;
}
Run Code Online (Sandbox Code Playgroud)
编译得很好.但为什么呢?理论上,constexpr函数只能调用其他constexpr函数.但是,不能保证运营商将是constexpr功能.例如,假设我有一些带有以下界面的类型:
class someType
{
someType operator + (const someType &rhs);
someType operator * (const someType &rhs);
};
Run Code Online (Sandbox Code Playgroud)
运算符+和*不是 constexpr.如果我写下面的代码:
fma(someType(), someType(), someType());
Run Code Online (Sandbox Code Playgroud)
它应该无法编译,因为constexpr函数调用非constexpr函数.但它编译得很好.为什么是这样?
我正在使用MinGW的G ++编译器和-std = c ++ 0x选项.
是否为MinGW预编译了Boost二进制文件?我已经尝试过自己编译它们并且遇到了太多的困难,而且在这一点上我很确定我已经破坏了对Windows至关重要的东西,并且我将弄清楚两个月之后会发生什么.那么有谁知道我可以在哪里使用预编译的boost库?如果没有,我想我会等到明天的std :: thread变得可用.
我有一个关于在C++中使用多维std :: intializer_list的问题.我有一个Matrix类,我希望能够像这样初始化它:
Matrix<int, 3, 3> m({{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
Run Code Online (Sandbox Code Playgroud)
我现在的构造函数接受一个二维初始化列表的参数,但编译器不喜欢我如何使用它.这是代码:
template<typename T, unsigned int rows, unsigned int cols>
Matrix<T, rows, cols>::Matrix(std::initializer_list<std::initializer_list<T> > set)
{
std::vector<std::initializer_list<T> > setVec = set;
std::vector<std::vector<T> > v;
for (std::vector<std::initializer_list<T> >::iterator i = setVec.begin(); i != setVec.end(); i++)
{
v.push_back(std::vector<T>(*i));
}
this->matrixData = new T*[rows];
for (unsigned int i = 0; i < rows; i++)
{
this->matrixData[i] = new T[cols];
for (unsigned int j = 0; j < cols; j++) …Run Code Online (Sandbox Code Playgroud) 我有这个着色器代码(GLSL):
#version 420
in vec4 vertex;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
void main()
{
gl_Position = modelViewMatrix * projectionMatrix * vertex;
}
Run Code Online (Sandbox Code Playgroud)
glUniformMatrix4fv(location, 1, false, sendArray);location
我已经验证"location"和"sendArray"包含正确的数据.这里发生了什么?
编辑:问题似乎是在glUniformMatrix4fv调用中,但我不知道它有什么问题.
设置的代码
GLint location;
GLint location = glGetUniformLocation(this->programID, uniform.c_str());
if (location == -1)
{
throw ShaderVariableNotFoundException(uniform, this->programID);
}
Run Code Online (Sandbox Code Playgroud)
如下:
#version 420
in vec4 vertex;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
void main()
{
gl_Position = modelViewMatrix * projectionMatrix * vertex;
}
Run Code Online (Sandbox Code Playgroud)
glUniformMatrix4fv(location, 1, false, sendArray);