-2

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

part:a->

我一直在尝试以相反的顺序显示向量的元素。但没有任何工作。我用过 iterotar 之类的;

for (it=vec.end(); it!=vec.begin(); --it){ 
// it is iterator not reverse_iterator.
// do work
}

PS我对迭代器不太熟悉。我今天第一次使用它们以相反的顺序显示 elem。

也试过了;

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

4

4 回答 4

5

The standard solution uses reverse iterators:

for (auto it = v.rbegin(); it != v.rend(); ++it)
{
    if (it != v.rbegin()) { std::cout << ' '; }
    std::cout << *it;
}

Alternatively, you can use indices, but keep the "reversal" idiom and increment the index:

for (std::size_t i = 0; i != v.size(); ++i)
{
    if (i != 0) { std::cout << ' '; }
    std::cout << v[v.size() - i - 1];
}

Note that reverse iterators are literally just doing something very similar to the explicit loop under the hood. In particular, the base() member function of a reverse iterator gives you the corresponding ordinary iterator offset by one, just as we have a - 1 in the index computation. (E.g. rbegin() is just end() under the hood, but decrements by one upon dereferencing.)

于 2012-12-16T14:36:58.607 回答
2

Use reverse iterators:

for (auto it = vec.crend(); it != vec.crbegin(); ++it) {
    std::cout << *it << ' ';
}
std::cout << '\n';
于 2012-12-16T14:36:49.973 回答
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只是一种获取intin 位大小以避免截断的方法。

于 2012-12-16T14:40:41.807 回答
-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;
}
于 2012-12-16T14:40:40.413 回答