8

我在 C++ Primer (3.23) 中进行了近 2 天的小练习。我尝试了很多方法来为vector<int>. 我会给你一个实际的练习,我在这个练习和我到目前为止所使用的代码,但它完全错误。我做了很多研究,但没有发现任何有用的东西。

编写一个程序来创建一个vector包含 10 个元素的int元素。使用迭代器,为每个元素分配一个两倍于当前值的值。通过打印测试程序vector

这是我的代码

int main(){  
vector<int> num(10);

for (auto it=num.begin();it != num.end() ;++it)//iterating through each element in vector 
{
    *it=2;//assign value to vector using iterator
    for (auto n=num.begin() ;n!=num.end();++n)//Iterating through existing elements in vector 
    {   
        *it+=*n;// Compound of elements from the first loop and 2 loop iteration
    }    
    cout<<*it<<" ";
}

keep_window_open("~");
return 0;
}  

我的问题是我不知道如何使用迭代器int为每个vector元素分配一个值(我对 1 做过,但对五个元素没有做过)!此外,我对如何使用 10 个元素进行此练习感到头疼vector,每个元素必须是不同的值,并且迭代器必须执行分配。
感谢您的时间。

4

2 回答 2

9

这是公认答案的一个更简洁的版本,使用递增迭代器而不是 for 循环的概念:

#include <iostream>
#include <vector>

using namespace std;

int main()
{  
    vector<int> num(10);

    int n = 1;
    vector<int>::iterator it = num.begin();
    vector<int>::iterator itEnd = num.end();

    while (it != itEnd)
    {
        *it = n = n*2;
        cout << *it << " ";
        it++;
    }
}
于 2016-09-01T15:43:01.770 回答
6

你可以这样做:

#include <iostream>
#include <vector>

using namespace std;

int main(){  

    vector<int> num(10);

    int initial_value = 2;
    *num.begin() = initial_value;
    cout<<*num.begin()<<" ";
    for (std::vector<int>::iterator it=num.begin()+1; it != num.end() ;++it)//iterating thru each elementn in vector 
    {
        *it=*(it-1) * 2;//assign value wtih 2 times of previous iterator

        cout<<*it<<" ";
    }

    return 0;
}

你只需要给第一个迭代器一些初始值,其余的在 for 循环中计算

于 2013-06-25T04:56:03.183 回答