• 头文件
#include <vector>
  • 定义vector
vector<int> myIntVt;
vector<string> myStringVt;
  • begin() 返回指向容器中第一个元素的迭代器。
std::vector<int>::iterator it = myvector.begin() ;
  • end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
std::vector<int>::iterator it = myvector.end() ;
  • rbegin() 返回指向最后一个元素的迭代器。
std::vector<int>::iterator it = myvector.rbegin() ;
  • rend() 返回指向第一个元素所在位置前一个位置的迭代器。
std::vector<int>::iterator it = myvector.rend() ;
  • cbegin()begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
std::vector<int>::iterator it = myvector.cbegin() ;
  • cend()end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
std::vector<int>::iterator it = myvector.cend() ;
  • crbegin()rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
std::vector<int>::iterator it = myvector.crbegin() ;
  • crend()rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
std::vector<int>::iterator it = myvector.crend() ;
  • size() 返回实际元素个数。
std::vector<int> myvector;

// 向myvector中添加内容
for (int i = 0; i < 100; i++) myvector.push_back(i);

std::cout << "size: " << myvector.size() << "\n";
  • max_size() 返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
std::vector<int> myints;
int size = myints.max_size();
  • resize() 改变实际元素的个数。
std::vector<int> myvector;

// 初始化内容
for (int i = 1; i < 10; i++) myvector.push_back(i);

myvector.resize(5);
myvector.resize(8, 100);
myvector.resize(12);
  • capacity() 返回当前容量。
std::cout << "capacity: " << (int) myvector.capacity() << '\n';
  • empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
std::vector<int> myvector;
int sum (0);

for (int i=1;i<=10;i++) myvector.push_back(i);

while (!myvector.empty())
{
 sum += myvector.back();
 myvector.pop_back();
}
  • reserve() 增加容器的容量。
std::vector<int> bar;
sz = bar.capacity();
bar.reserve(100);   // 这是与上面的foo唯一的区别
std::cout << "making bar grow:\n";
for (int i = 0; i < 100; ++i) {
	bar.push_back(i);
	if (sz != bar.capacity()) {
		sz = bar.capacity();
		std::cout << "容量已更改: " << sz << '\n';
	}
}
  • shrink _to_fit() 将内存减少到等于当前元素实际所使用的大小。
std::vector<int> myvector(100);
std::cout << "1. myvector的容量: " << myvector.capacity() << '\n';

myvector.resize(10);
std::cout << "2. myvector的容量: " << myvector.capacity() << '\n';

myvector.shrink_to_fit();
std::cout << "3. myvector的容量: " << myvector.capacity() << '\n';
  • `operator[ ] 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
// 分配一些值:
for (unsigned i = 0; i < sz; i++) 
	myvector[i] = i;
  • at() 使用经过边界检查的索引访问元素。
for (unsigned i = 0; i < myvector.size(); i++)
	myvector.at(i) = i;
  • front() 返回第一个元素的引用。
std::cout << "myvector.front() is now " << myvector.front() << '\n';
  • back() 返回最后一个元素的引用。
std::vector<int> myvector;

myvector.push_back(10);

while (myvector.back() != 0)
{
myvector.push_back ( myvector.back() -1 );
}
  • data() 返回指向容器中第一个元素的指针。
std::vector<int> myvector (5);

int* p = myvector.data();

*p = 10;
++p;
*p = 20;
p[2] = 100;

std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];
std::cout << '\n';
  • assign() 用新元素替换原有内容。
std::vector<int> first;
std::vector<int> second;
std::vector<int> third;

first.assign(7, 100);             // 7个整数,值为100

std::vector<int>::iterator it;
it = first.begin() + 1;

second.assign(it, first.end() - 1); // 从第2个值到到数第1个值

int myints[] = { 1776,7,4 };
third.assign(myints, myints + 3);   // 从数组分配

std::cout << "Size of first: " << int(first.size()) << '\n';
std::cout << "Size of second: " << int(second.size()) << '\n';
std::cout << "Size of third: " << int(third.size()) << '\n';
  • push_back() 在序列的尾部添加一个元素。
std::vector<int> myvector;
int myint;

std::cout << "请输入一些整数 (输入0结束):\n";

do {
	std::cin >> myint;
	myvector.push_back(myint);
} while (myint);

std::cout << "myvector stores " << int(myvector.size()) << " numbers.\n"
  • pop_back() 移出序列尾部的元素。
std::vector<int> myvector;
int sum(0);
myvector.push_back(100);
myvector.push_back(200);
myvector.push_back(300);

while (!myvector.empty())
{
	sum += myvector.back();
	myvector.pop_back();
}

std::cout << "myvector的元素总计为: " << sum << '\n';
  • insert() 在指定的位置插入一个或多个元素。
std::vector<int> myvector(3, 100);
std::vector<int>::iterator it;

it = myvector.begin();
it = myvector.insert(it, 200);

myvector.insert(it, 2, 300);

// "it" 不再有效,请换一个新的:
it = myvector.begin();

std::vector<int> anothervector(2, 400);
myvector.insert(it + 2, anothervector.begin(), anothervector.end());

int myarray[] = { 501,502,503 };
myvector.insert(myvector.begin(), myarray, myarray + 3);

std::cout << "myvector contains:";
for (it = myvector.begin(); it < myvector.end(); it++)
	std::cout << ' ' << *it;
std::cout << '\n';
  • erase() 移出一个元素或一段元素。
std::vector<int> myvector;

// set some values (from 1 to 10)
for (int i = 1; i <= 10; i++) myvector.push_back(i);

// erase the 6th element
myvector.erase(myvector.begin() + 5);

// erase the first 3 elements:
myvector.erase(myvector.begin(), myvector.begin() + 3);

std::cout << "myvector contains:";
for (unsigned i = 0; i < myvector.size(); ++i)
	std::cout << ' ' << myvector[i];
std::cout << '\n';
  • clear() 移出所有的元素,容器大小变为 0。
myvector.clear();
  • swap() 交换两个容器的所有元素。
std::vector<int> foo(3, 100);   // 100 100 100
std::vector<int> bar(5, 200);   // 200 200 200 200 200

foo.swap(bar);

std::cout << "foo contains:";
for (unsigned i = 0; i < foo.size(); i++)
	std::cout << ' ' << foo[i];
std::cout << '\n';

std::cout << "bar contains:";
for (unsigned i = 0; i < bar.size(); i++)
	std::cout << ' ' << bar[i];
std::cout << '\n';
  • emplace() 在指定的位置直接生成一个元素。
std::vector<int> myvector = {10,20,30};

auto it = myvector.emplace ( myvector.begin()+1, 100 );
myvector.emplace ( it, 200 );
myvector.emplace ( myvector.end(), 300 );

std::cout << "myvector contains:";
for (auto& x: myvector)
std::cout << ' ' << x;
std::cout << '\n';
  • emplace_back() 在序列尾部生成一个元素。
std::vector<int> myvector = {10,20,30};

myvector.emplace_back (100);
myvector.emplace_back (200);

std::cout << "myvector contains:";
for (auto& x: myvector)
std::cout << ' ' << x;
std::cout << '\n';
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐