C++ 如何有效地使用向量?

C++ 如何有效地使用向量?,c++,vector,C++,Vector,我在代码中使用向量和向量大小类型 #include <iostream> #include <vector> using namespace std; using std::vector; typedef vector<int>::size_type size_type; int main() { size_type n; cin>>n; vector<int> u(n,0); for(size_

我在代码中使用向量和向量大小类型

#include <iostream>
#include <vector>

using namespace std;
using std::vector;

typedef vector<int>::size_type size_type;

int main()
{
    size_type n; 
    cin>>n;
    vector<int> u(n,0);
    for(size_type i = 0; i != n; ++i) {
      cin >> u[i];
    }
    cout << *u.end();

    return 0;
}
#包括
#包括
使用名称空间std;
使用std::vector;
typedef向量::大小\类型大小\类型;
int main()
{
n型尺寸;
cin>>n;
向量u(n,0);
对于(尺寸类型i=0;i!=n;++i){
cin>>u[i];
}
cout
u.end()
给出了一个指向最后一个元素之外的迭代器;您必须将其减量以指向最后一个元素。您不能取消对过去的结束迭代器的引用;尝试这样做会产生未定义的行为

最后一个元素可用作
u.back()

cout<<*u.end();

u.end()

cout<<*u.end();
其中n的值被从循环中排除。您可以按照以下方式重写循环

for ( std::vector<int>::iterator it = u.begin(); it != u.end(); ++it )
for(std::vector::iterator it=u.begin();it!=u.end();+it)

实际上
u.end()
等于
u.begin()+n
如果n不是一个可接受的索引,那么
u.begin()+n
不是一个可以取消引用的迭代器。

这与效率有什么关系?
for(size_type i=0; i!=n; ++i)
for ( std::vector<int>::iterator it = u.begin(); it != u.end(); ++it )