向量
#include
vector
长度不定的数组
时间:越长越好
空间:越少越好
进行一次插入:O(n)
进行n次插入:O(n^2)
C++中数组溢出会自动成倍扩容
vector的使用,即向量的构造
int myArray[] = { 1, 2, 3, 4, 5 };
vector<int> myVector1;
vector<int> myVector2(myArray, myArray + 5); //1 2 3 4 5
vector<int> myVector3(5, 2); //2 2 2 2 2
vector<int> myVector4(myVector2); //1 2 3 4 5
vector<int> myVector5(myVector4.begin(), myVector4.end());//1,2,3 ,4,5
//只能一个一个输出
cout << myVector5[2];
vector的常用操作
int myArray[] = { 1, 2, 3, 4, 5 };
//定义myVector
vector<int> myVector(myArray, myArray + 5); //1 2 3 4 5
//计算长度
int n = myVector.size(); //n=5
//和栈类似,pop,push 先入后出,使用的都是pop和push
myVector.pop_back(); //1 2 3 4
myVector.push_back(6); //1 2 3 4 6
//插入操作
//插入位置,插入数字
myVector.insert(myVector.begin() + 1, 9); //1 9 2 3 4 6
//插入位置,插入3个7
myVector.insert(myVector.begin(), 3, 7); //7 7 7 1 9 2 3 4 6
//插入位置,插入数组从哪插到哪
myVector.insert(myVector.begin(), myArray, myArray + 2);//1 2 7 7 7 1 9 2 3 4 6
//删除操作
//删除位置
myVector.erase(myVector.begin() + 6);//1 2 7 7 7 1 2 3 4 6
//删除起始位置,末尾位置
myVector.erase(myVector.begin() + 1, myVector.begin() + 3);//1 7 7 1 2 3 4 6
//全部删除用clear()
myVector.clear();
队列
#include
queue
队尾插入,对头删除 先入先出
入队 出队 判空 访问队首
queue<int> myQueue;
int sum = 0;
for (int i = 0; i < 10; i++)
{
myQueue.push(i); //入队
}
while (!myQueue.empty())
{
sum = sum + myQueue.front();//访问队首
myQueue.pop(); //出队
}
printf("%d\n", sum);
栈
#include
stack
后入先出
入栈 出栈 判空 访问栈顶
stack<int> myStack;
for (int i = 0; i < 10; i++)
{
myStack.push(i);
}
int sum = 0;
while (!myStack.empty())
{
printf("%d", myStack.top());
sum += myStack.top();
myStack.pop();
}
printf("\n%d\n", sum);
1.逆序输出
2.括号匹配
栈中的括号都是左括号,见到右括号之后就出栈
3.表达式求值