以相反的顺序显示矢量元素

时间:2012-12-16 14:29:31

标签: c++

我有两个问题,但它们是相互关联的。:

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部分,则无需反转向量的元素。

4 个答案:

答案 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;
}