- 1. Vectors Introduction
- 4. Vectors and Iterators
- 5. Vectors and Its Prog Ans
- 7. assign Elements
- 8. push_back Elements
- 9. insert elements
- 10. emplace Elements
- 11. Add Elements Prog. Quiz
- 13. clear Vector
- 14. erase Vector
- 15. pop_back
1. Vectors Introduction
C++中有很多很好用的容器类,比如vector:
- The vector has size 0 when we instantiate it.
- We use ‘resize’ to change the size of the vector.
// constructing vectors
#include <iostream>
#include <vector> //Need to include the vector library!
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//Changing the size of vectorInts to 6
vectorInts.resize(6);
std::cout<<"\n\nvectorInts now has "<<vectorInts.size()<<" elements\n";
return 0;
}
vectorInts has 0 elements
vectorInts now has 6 elements
4. Vectors and Iterators
vector比array更通用,可以在运行时修改其长度,也可以插入元素到vector。
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
std::cout<<"\n\nAdding four elements to the vector\n";
//assigning the value 3 to 4 elements of the vector
vectorInts.assign(4,3);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
vectorInts has 0 elements
Adding four elements to the vector
vectorInts has 4 elements
VectorInts has these elements:
3 3 3 3
5. Vectors and Its Prog Ans
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<float> vIn);
void printVector(vector<float> vIn)
{//printing the contents of vIns
//TODO: Complete the function
vector<float>::iterator it;
for (it = vIn.begin(); it != vIn.end(); ++it)
cout<<*it<<" ";
}
// Goal: pracitce constructing vectors
// and their iterators
// Call the vector vFloat
// Call the iterator it
//TODO: Add the necessary libraries
#include "main.hpp"
int main ()
{
//TODO: create a vector of floats
vector<float> vFloat;
std::cout<<"vFloat has "<<vFloat.size()<<" elements\n";
//TODO: add elements to the library
std::cout<<"\n\nAdding 10 elements to the vector\n";
//TODO: assign the value 8.8 to 10 elements of the vector
vFloat.assign(10, 8.8);
std::cout<<"vFloat has "<<vFloat.size()<<" elements\n";
//TODO: Complete the Print function in main.hpp
// Call the function here to print out each element of vFloat
printVector(vFloat);
return 0;
}
输出:
vFloat has 0 elements
Adding 10 elements to the vector
vFloat has 10 elements
8.8 8.8 8.8 8.8 8.8 8.8 8.8 8.8 8.8 8.8
7. assign Elements
参考下面的代码,通过assign赋值的时候,会把之前的vector覆盖:
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
std::cout<<"Adding 23 to the vector\n";
vectorInts.assign(1,23);
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
std::cout<<"\n\nAdding four elements to the vector\n";
//assigning the value 3 to 4 elements of the vector
vectorInts.assign(4,3);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
输出:
vectorInts has 0 elements
Adding 23 to the vector
23
Adding four elements to the vector
vectorInts has 4 elements
VectorInts has these elements:
3 3 3 3
8. push_back Elements
有时我们想全覆盖的形式,那可以用上面的assign,但是有时想从末尾追加的话:
vectorInts.push_back(24);
vectorInts.push_back(25);
vectorInts.push_back(26);
vectorInts.push_back(27);
修改上面的示例代码:
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
std::cout<<"Adding 23 to the vector\n";
vectorInts.assign(1,23);
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
std::cout<<"\n\nAdding four elements to the vector\n";
//assigning the value 3 to 4 elements of the vector
vectorInts.push_back(24);
vectorInts.push_back(25);
vectorInts.push_back(26);
vectorInts.push_back(27);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
vectorInts has 0 elements
Adding 23 to the vector
23
Adding four elements to the vector
vectorInts has 5 elements
VectorInts has these elements:
23 24 25 26 27
9. insert elements
通过insert,可以在任意我们想插入的地方添加新的value,比如:
it = vectorInts.begin() + 1;
vectorInts.insert(it, -1); // 在第一个元素后添加-1
比如:
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
vectorInts.push_back(0);
vectorInts.push_back(1);
vectorInts.push_back(2);
vectorInts.push_back(3);
vectorInts.push_back(4);
vectorInts.push_back(5);
vectorInts.push_back(6);
vectorInts.push_back(7);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//insert an element after the first element
it = vectorInts.begin() + 1;
vectorInts.insert(it, -1);
std::cout<<"\n\nAfter the insert\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//insert an element after the third element
it = vectorInts.begin();
vectorInts.insert(it + 3, -2);
std::cout<<"\n\nAfter the insert\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//insert an element after the third element
it = vectorInts.begin();
vectorInts.insert(it + 5, -3);
std::cout<<"\n\nAfter the insert\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
vectorInts has 8 elements
VectorInts has these elements:
0 1 2 3 4 5 6 7
After the insert
0 -1 1 2 3 4 5 6 7
After the insert
0 -1 1 -2 2 3 4 5 6 7
After the insert
0 -1 1 -2 2 -3 3 4 5 6 7
10. emplace Elements
C++11中,针对顺序容器(如vector、deque、list),新标准引入了三个新成员: emplace_front、emplace和emplace_back
,这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back
,允许我们将元素放置在容器头部、一个指定位置之前或容器尾部。
当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。
The difference makes emplace more efficient than insert in special cases.
insert:
copies objects into the vector.emplace:
construct them inside of the vector.
如下代码:
struct Foo
{
Foo(int n, double x);
};
std::vector<Foo> v;
v.emplace(someIterator, 42, 3.1416);
v.insert(someIterator, Foo(42, 3.1416));
11. Add Elements Prog. Quiz
In this programming quiz, use these member functions to complete the functions in the header file.
- assign
- push_back
- insert
- emplace
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int> vIn);
void assignFunction(vector<int> vInts, int in);
void pushBackFunction(vector<int> vInts, int in);
void emplaceFunction(vector<int> vInts, int loc, int in);
void printVector(vector<int> vIn)
{//printing the contents of vIns
//TODO: Finish the function
vector<int>::iterator it;
for (it=vIn.begin();it!=vIn.end();++it){
cout << *it;
}
}
void assignFunction(vector<int> vInts, int in)
{
cout<<"\nassigning "<<in<<" and printing the vector\n";
//TODO: Finish the function
int iSize = vInts.size();
vInts.assign(iSize,in);
printVector(vInts);
}
void pushBackFunction(vector<int> vInts, int in)
{
cout<<"\npush back "<<in<<" and printing the vector\n";
//TODO: Finish the function
vInts.push_back(in);
printVector(vInts);
}
void emplaceFunction(vector<int> vInts, int loc, int in)
{
vector<int>::iterator it;
cout<<"\nemplacing "<<in<<" and printing the vector\n";
//TODO: Finish the function
it = vInts.begin() + loc;
vInts.emplace(it,in);
printVector(vInts);
}
// Goal: pracitce constructing vectors
// and their iterators
// Call the vector vFloat
// Call the iterator it
#include "main.hpp"
int main ()
{
vector<int> vInts;
vInts.assign(10, 5);
printVector(vInts);
assignFunction(vInts, 1);
pushBackFunction(vInts, 2);
emplaceFunction(vInts,1, 3);
return 0;
}
输出:
5 5 5 5 5 5 5 5 5 5
assigning 1 and printing the vector
1 1 1 1 1 1 1 1 1 1
push back 2 and printing the vector
5 5 5 5 5 5 5 5 5 5 2
emplacing 3 and printing the vector
5 3 5 5 5 5 5 5 5 5 5
上面的每一次输出,均不是基于前一次的结果,因为传递进入的值本身没有被改变。
13. clear Vector
We can remove all elements from the vector at the same time using the method ::clear.
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
vectorInts.push_back(0);
vectorInts.push_back(1);
vectorInts.push_back(2);
vectorInts.push_back(3);
vectorInts.push_back(4);
vectorInts.push_back(5);
vectorInts.push_back(6);
vectorInts.push_back(7);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//clear the vector
vectorInts.clear();
std::cout<<"\nAfter clear, the vector has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
vectorInts has 8 elements
VectorInts has these elements:
0 1 2 3 4 5 6 7
After clear, the vector has these elements:
14. erase Vector
- delete a single element from a vector For example:
//erase the 5th element in the vector
vectorInts.erase(vectorInts.begin()+4);
- delete a range of elements form a vector For example:
//erase a range of elements in the vector
vectorInts.erase(vectorInts.begin()+1, vectorInts.begin()+3);
示例代码如下:
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
vectorInts.push_back(0);
vectorInts.push_back(1);
vectorInts.push_back(2);
vectorInts.push_back(3);
vectorInts.push_back(4);
vectorInts.push_back(5);
vectorInts.push_back(6);
vectorInts.push_back(7);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//clear the vector
it = vectorInts.begin();
vectorInts.erase(it + 4);
std::cout<<"\nAfter clear, the vector has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
return 0;
}
输出(删除了第四个之后的一个元素,即第五个元素):
vectorInts has 8 elements
VectorInts has these elements:
0 1 2 3 4 5 6 7
After clear, the vector has these elements:
0 1 2 3 5 6 7
15. pop_back
We can remove the last element of a vector using ::pop_back.
//pop the last element off the vector
vectorInts.pop_back();
pop_back DOES NOT return a value!,没有返回值。
// constructing vectors
// constructing vectors
#include <iostream>
#include <vector>
int main ()
{
//creating a vector of integers
std::vector<int> vectorInts;
//creating an iterator for the vector
std::vector<int>::iterator it;
vectorInts.push_back(0);
vectorInts.push_back(1);
vectorInts.push_back(2);
vectorInts.push_back(3);
vectorInts.push_back(4);
vectorInts.push_back(5);
vectorInts.push_back(6);
vectorInts.push_back(7);
std::cout<<"vectorInts has "<<vectorInts.size()<<" elements\n";
//printing the contents of vectorInts
std::cout<<"VectorInts has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//pop the last element off the vector
vectorInts.pop_back();
std::cout<<"\n\nAfter pop_back(), the vector has these elements:\n";
for (it = vectorInts.begin(); it != vectorInts.end(); ++it)
std::cout<<*it<<" ";
//pop_back does not return the element that was removed.
//For example, the line of code below will return an error.
int a;
//a = vectorInts.pop_back(); //this line does not compile
return 0;
}
vectorInts has 8 elements
VectorInts has these elements:
0 1 2 3 4 5 6 7
After pop_back(), the vector has these elements:
0 1 2 3 4 5 6