动态数组:动态的变化数组大小,创建新大小的数组,然后删除老数组
称为Vector class,其实是Dynamic array;其为内存连续的数组,并且尽量使用对象而不是指针进行修改
静态数组:
#include <iostream>
#include <string>
int main()
{
Vertex* vertices = new Vertex[5];
vertices[0];
std::cin.get();
}
动态数组:使用标准模板库的Vector类(std::vector)
#include <iostream>
#include <string>
#include <vector>
struct Vertex //结构体
{
float x, y, z;
};
std::ostream& operator<<(std::ostream& stream, const Vertex& vertex)
{
stream << vertex.x << "," << vertex.y << "," << vertex.z;
return stream;
} //输出运算符的重载,可以很容易把它打印给控制台了
int main()
{
std::vector<Vertex> vertices; //C++和C#都可以传递原始类型Vertex,在Java中不行需要用Integer类或其他
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; //C++和C#可以堆索引操作符进行重载;std::cout << vertices.get() Java没有操作符重载所以要这么写
// vertices.clear(); //数组清0
vertices.erase(vertices.begin() + 1); //将数组的第二个元素4,5,6清除
for (Vertex& v : vertices)
std::cout << v << std::endl;
std::cin.get();
}
将Vector传递给函数或数组时,通过引用传递他们
#include <iostream>
#include <string>
#include <vector>
struct Vertex //结构体
{
float x, y, z;
};
std::ostream& operator<<(std::ostream& stream, const Vertex& vertex)
{
stream << vertex.x << "," << vertex.y << "," << vertex.z;
return stream;
}
//将Vector传递给函数或数组时,通过引用传递他们
void Function(const std::vector<Vertex>& vertices)
{
}
int main()
{
std::vector<Vertex> vertices;
vertices.push_back({ 1, 2, 3 });
vertices.push_back({ 4, 5, 6 });
Function(vertices);
for (int i = 0; i < vertices.size(); i++)
std::cout << vertices[i] << std::endl;
vertices.erase(vertices.begin() + 1); //将数组的第二个元素4,5,6清除
for (Vertex& v : vertices)
std::cout << v << std::endl;
std::cin.get();
}