从用户获取字符串输入,然后将其放在c ++中的向量(第一个)中,例如,如果string是“038493”,当我第一次访问[0]时,它会给我0.我们怎样才能更快地完成它。
string p;
cin>>p;
for(i=0;i<n;i++){
first.push_back(p[i]);
}
我用过这个,但这很慢,请告诉我这样做的好方法。
答案 0 :(得分:1)
first.insert(first.end(), p.begin(), p.begin() + n);
如果n实际上是整个字符串的长度,最好使用:
first.insert(first.end(), p.begin(), p.end());
答案 1 :(得分:0)
//`for(char&amp; c:p){ // first.push_back(c); //}
道歉,我错了。我想如果你将这个构造函数用于向量,那将是最快的方法。胡安有正确的想法。std::vector<char> first(p.begin(), p.end());
答案 2 :(得分:0)
最快:什么都不做。对于大多数用途,std::string
基本上可以充当std::vector<char>
,而实际上没有什么比做某事更快。
std::string p;
cin >> p;
// just use p
// p[0] is the first char, e.g. '0', so you don't have to do anything
// p[1] is the second, etc.
// p.size() is the size
下一个最快:直接构建你的向量:
std::vector<char> data(p.begin(), p.end());
这将确保只进行一次正确数量的分配(至少p.size()
),并尽可能有效地将字符串复制到向量中。
下一步:一次添加一个角色:
// C++11
std::vector<char> data;
for (char c : p) {
data.push_back(c);
}
// C++03
for (size_t i = 0; i < data.size(); ++i) {
data.push_back(p[i]);
}
字符串越长,与直接构造方法相比,将进行更多额外的分配/复制。确切的数量取决于实现,但这种方法总是会更慢 - 即使你的特定实现默认 - 构造一个具有大初始容量的向量(因为你至少必须在每个push_back
上分支以检查你是否必须resize
......而直接建筑甚至不必这样做。