我有两个问题,但它们是相互关联的。:
part:a->
我一直试图以相反的顺序显示向量的元素。但没有任何工作。我曾经使用iterotar;
for (it=vec.end(); it!=vec.begin(); --it){
// it is iterator not reverse_iterator.
// do work
}
P.S我对迭代器不熟悉。我今天第一次使用它们 以相反的顺序显示元素。
也试过了;
for (int i=vec.size(); i!=0; i--){
//display
}
无论我做什么,它总是以与它们相同的顺序显示元素,即不是以相反的顺序。
part_b->
有没有办法可以将递归函数的输出直接存储到向量中。像代码是: 我知道这不起作用。我试过但只是给你一个想法 我最重要的是什么。
#include <iostream>
using namespace std;
#include "vector"
int func(int num);
vector <int> vec;
int main() {
int num=34;
// I know this would not work. But is there any possibilitiy that
// I can store the output in a vector.
vec = binary(num);
// trying to display the vector.
for (int i=vec.size();i!=0;i--) {
cout<<vec[i]<<" ";
} // not working for reverse display.
} //main.
int func(int num) {
if (num==1) {
//vec.push_back(1);
return 1;
}
else if(num==0) {
//vec.push_back(0);
return 0;
}
else {
//vec.push_back(input%2);
return binary(input/2);
}
} //func.
我希望你能解开这个问题。如果我能够做b部分,则无需反转向量的元素。
答案 0 :(得分:5)
标准解决方案使用反向迭代器:
for (auto it = v.rbegin(); it != v.rend(); ++it)
{
if (it != v.rbegin()) { std::cout << ' '; }
std::cout << *it;
}
或者,你可以使用索引,但保持“反转”成语和增量索引:
for (std::size_t i = 0; i != v.size(); ++i)
{
if (i != 0) { std::cout << ' '; }
std::cout << v[v.size() - i - 1];
}
请注意,反向迭代器实际上只是在做一些非常类似于引擎盖下的显式循环。特别是,反向迭代器的base()
成员函数为您提供了相应的普通迭代器偏移量,就像我们在索引计算中有- 1
一样。 (例如rbegin()
只是end()
引人注目,但在解除引用时会减1。)
答案 1 :(得分:2)
使用反向迭代器:
for (auto it = vec.crend(); it != vec.crbegin(); ++it) {
std::cout << *it << ' ';
}
std::cout << '\n';
答案 2 :(得分:2)
A部分
假设您无法访问C ++ 11:
vector<int>::const_reverse_iterator it;
for (it=vec.rbegin(); it!=vec.rend(); ++it)
{
// do work
}
B部分
看起来非常像你试图以二进制显示数字。不幸的是,就我所知,ostream上的标准标志只允许十六进制,十进制或八进制,但我可以建议一种更简单的方法吗?
#include <bitset>
bitset< sizeof(int) << 3 > b(34);
cout << b << endl;
给出了:
00000000000000000000000000100010
相当丑陋的sizeof(int) << 3
只是一种获取int
的大小以避免截断的方法。
答案 3 :(得分:-1)
我写了一些可能有帮助的程序。也许你的矢量是空的?
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<int> vec;
vec.insert(vec.begin(), 1, 1);
vec.insert(vec.begin(), 1, 2);
vec.insert(vec.begin(), 1, 3);
vector<int>::iterator i;
for (i = vec.end(); i != vec.begin(); --i)
{
cout << *i;
}
cout << *i;
return 0;
}