我注意到在有效的STL
向量是这样一种序列 默认情况下应该使用。
这是什么意思?似乎忽略效率向量可以做任何事情。
谁能给我一个场景,其中向量不是一个可行的选择,但必须使用列表?
我注意到在有效的STL
向量是这样一种序列 默认情况下应该使用。
这是什么意思?似乎忽略效率向量可以做任何事情。
谁能给我一个场景,其中向量不是一个可行的选择,但必须使用列表?
vector<int> myVector;
假设向量中的值是这样的(按这个顺序):
5 9 2 8 0 7
如果我想删除包含“8”值的元素,我想我会这样做:
myVector.erase(myVector.begin()+4);
因为这会把第4个元素擦掉。但是有什么方法可以擦除基于值“8”的元素吗?如:
myVector.eraseElementWhoseValueIs(8);
或者我只是需要遍历所有向量元素并测试它们的值?
找出std::vector中所有元素的和的好方法是什么?
假设我有一个向量std::vector<int> vector,其中有几个元素。现在我要求所有元素的和。同样的东西有什么不同的表达方式?
我需要采取一个c++向量与潜在的很多元素,擦除重复,并排序。
我目前有下面的代码,但它不起作用。
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
我怎样才能正确地做到这一点呢?
此外,是先删除副本(类似于上面的编码)还是先执行排序更快?如果我先执行排序,它是否保证在std::unique执行后保持排序?
或者是否有另一种(也许更有效的)方法来完成这一切?
假设我有一个向量,它嵌套在一个有一级或二级的数据框架中。是否有一种快速而肮脏的方法来访问最后一个值,而不使用length()函数?一些ala PERL的$#特殊的var?
所以我想要这样的东西:
dat$vec1$vec2[$#]
而不是:
dat$vec1$vec2[length(dat$vec1$vec2)]
在<算法>中是否有一些东西允许您检查std:: container是否包含某些内容?或者,一种制作方法,例如:
if(a.x == b.x && a.y == b.y)
return true;
return false;
这只能用std::map完成,因为它使用键?
谢谢
在c++中,std::vector和std::array之间有什么区别?什么时候应该优先选择一个?它们各自的优点和缺点是什么?我的课本只列出了它们的相同之处。
假设我有一个大小为n的std::vector(让我们称之为myVec),构造一个由元素X到Y的副本组成的新向量,其中0 <= X <= Y <= N-1,最简单的方法是什么?例如,大小为150000的向量中的myVec[100000]到myVec[100999]。
如果这不能有效地用一个向量,是否有另一种STL数据类型,我应该使用代替?
我应该用
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
or
std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators
按降序对向量排序?这两种方法有什么优点或缺点吗?
如何将std::vector的内容打印到屏幕上?
实现以下操作符<<的解决方案也很好:
template<container C, class T, String delim = ", ", String open = "[", String close = "]">
std::ostream & operator<<(std::ostream & o, const C<T> & x)
{
// ... What can I write here?
}
以下是目前为止我所做的,没有单独的函数:
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <vector>
#include <sstream>
#include <cstdio>
using namespace std;
int main()
{
ifstream file("maze.txt");
if (file) {
vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>()));
vector<char> path;
int x = 17;
char entrance = vec.at(16);
char firstsquare = vec.at(x);
if (entrance == 'S') {
path.push_back(entrance);
}
for (x = 17; isalpha(firstsquare); x++) {
path.push_back(firstsquare);
}
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
return 0;
}
}