先定义一个结构体
struct Vertex
{
float x, y, z;
};
写一个输出
std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {
stream << vertex.x << "," << vertex.y << "," << vertex.z;
return stream;
}
非动态数组的用法: Vertex* ve = new Vertex[5];
当你想访问ve[5]的时候就会出错。
因此使用vector,它叫这个名字跟容器没什么关系。
std::vector<Vertex> vertices;
vertices.push_back({ 1, 2, 3 });
vertices.push_back({ 4, 5, 6 });
for (int i = 0; i < vertices.size(); i++)
std::cout << vertices[i] << std::endl;
第二种输出方式:
for (Vertex v : vertices)/*这里是复制到循环里面的*/
std::cout << v << std::endl;
不过不太好,因为循环里面的 v 是从动态数组那复制过来的,有开销,而我们不需要改变动态数组的值,因此使用常量引用最好:
for (const Vertex& v : vertices)/*因此修改为这个*/
std::cout << v << std::endl;
对于函数来说也是一样的,不修改值的情况下使用常量引用:
/*确保你正在使用引用,当你不修改它的时候*/
void Function(const std::vector<Vertex>& vertices) {
}
动态数组的删除:
vertices.erase(vertices.begin() + 1); /*里面是迭代器,删除了第二个*/
vertices.clear()是直接清空。