C++ STL标准库:std::vector 用法要点
头文件#include <vector>定义vectorvector<int> myIntVt;vector<string> myStringVt;begin()返回指向容器中第一个元素的迭代器。std::vector<int>::iterator it = myvector.begin() ;end()返回指向容器最后一个元素所在位置后一个位置的迭
·
- 头文件
#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';
更多推荐
已为社区贡献5条内容
所有评论(0)