C++ c++;将整数向量转换为整数

C++ c++;将整数向量转换为整数,c++,vector,converter,C++,Vector,Converter,正在网上搜索简易指南,但找不到 我构建了一个从十进制到二进制的转换器,并将1和0保存在一个向量中。现在我想把这个向量变成一个整数。 我找到了各种转换为字符串而不是整数的方法(我真的不懂),这可以避免吗? 我想让它尽可能简单 这是我的密码: c、 水电站: #ifndef C_HPP #define C_HPP #include <vector> class Dualrechnung{ private: std::vector<int> vec; int

正在网上搜索简易指南,但找不到


我构建了一个从十进制到二进制的转换器,并将1和0保存在一个向量中。现在我想把这个向量变成一个整数。 我找到了各种转换为字符串而不是整数的方法(我真的不懂),这可以避免吗? 我想让它尽可能简单

这是我的密码:

c、 水电站:

#ifndef C_HPP
#define C_HPP
#include <vector>


class Dualrechnung{
private:
    std::vector<int> vec;
    int z = 123456; //Eingegebene Zahl
    int t_z = z; //temp Zahl

public:
    Dualrechnung();
    ~Dualrechnung();
};

#endif
#如果不使用C#U水电站
#定义C_水电站
#包括
Dualrechnung类{
私人:
std::vec;
int z=123456;//Eingegebene Zahl
int t_z=z;//temp Zahl
公众:
Dualrechnung();
~Dualrechnung();
};
#恩迪夫
c、 cpp:

#include <vector>
#include <cmath>
#include <sstream>
#include "c.hpp"
#include <iostream>


Dualrechnung::Dualrechnung()
{
    int b;
        for (int i=0; (t_z-(pow(2,i))) >= 0; i++) //finds biggest power of 2 in z
        {
            b= i;
        }
        t_z-=pow(2,b); //whats left after the biggest power 
        vec.push_back(1);
    for(int i = b; i > 0; --i) //checks for every power of 2 multiples smaller than b if they exist in z. if they are, saves 1 for that power in the vector and if not, saves 0.
    {
        b--;
        if((t_z-pow(2,b)) >= 0)
            {
                vec.push_back(1);
                t_z-=pow(2,b);
            }
        else{vec.push_back(0);}
    }

// here I'd like that integer with the information from the vector

    int bin; //binary value of z
        std::cout << z << " in Dual ist " << bin;

}


Dualrechnung::~Dualrechnung(){}
#包括
#包括
#包括
#包括“c.hpp”
#包括
Dualrechnung::Dualrechnung()
{
int b;
对于(int i=0;(t_z-(pow(2,i))>=0;i++)//查找z中2的最大幂
{
b=i;
}
t_z-=pow(2,b);//最大功率后剩下什么
向量推回(1);
for(int i=b;i>0;--i)//检查每个小于b的2倍的幂,如果它们存在于z中。如果存在,则在向量中为该幂保存1,如果不存在,则保存0。
{
b--;
如果((t_z-pow(2,b))>=0)
{
向量推回(1);
t_z-=pow(2,b);
}
else{vec.push_back(0);}
}
//这里我想要一个带有向量信息的整数
int bin;//z的二进制值

std::cout我为你写了这样的短信:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> myNumInVect = {1, 1, 0, 0, 1};
    int myNumInInteger = 0;
    int baseOfMyNumInVector = 2;
    for (int i : myNumInVect) {
        myNumInInteger = myNumInInteger * baseOfMyNumInVector + i;
    }
    cout << myNumInInteger;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
向量myNumInVect={1,1,0,0,1};
int myNumInInteger=0;
int baseofmynumivator=2;
用于(int i:myNumInVect){
myNumInInteger=myNumInInteger*BaseofMyNuminIvector+i;
}

我可以这样为你写短信吗

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> myNumInVect = {1, 1, 0, 0, 1};
    int myNumInInteger = 0;
    int baseOfMyNumInVector = 2;
    for (int i : myNumInVect) {
        myNumInInteger = myNumInInteger * baseOfMyNumInVector + i;
    }
    cout << myNumInInteger;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
向量myNumInVect={1,1,0,0,1};
int myNumInInteger=0;
int baseofmynumivator=2;
用于(int i:myNumInVect){
myNumInInteger=myNumInInteger*BaseofMyNuminIvector+i;
}

cout如果我理解正确,您需要将
int
转换为一组位,反之亦然。只需使用具有
unsigned long
的构造函数和方法将其转换回(您也可以将其转换为0和1s的字符串).

如果我理解正确,您需要将
int
转换为一组位,反之亦然。只需使用具有
无符号长
构造函数的方法和将其转换回的方法(您也可以将其转换为0和1的字符串)。

您不应该将pow()与整数一起使用。“将1和0保存在向量中”看起来你只需要
std::bitset
对@drescherjm的注释进行不相关的扩展:
pow
是为非常恶劣的情况而设计的,比如e到pi的幂,这会使使用它来做一些相对简单的事情,比如2到x非常昂贵。简单的乘法可能更好,可能是在循环中,或者b它会移位(
1)这样的循环会是什么样子?你能给我一个简单的例子吗?你不应该用pow()和整数。“把1和0保存在一个向量中”看起来你只需要
std::bitset
对@drescherjm的注释进行不相关的扩展:
pow
是为非常恶劣的情况而设计的,比如e到pi的幂,这会使使用它来做一些相对简单的事情,比如2到x非常昂贵。简单的乘法可能更好,可能是在循环中,或者b它移动(
1)这样一个循环会是什么样子?你能给我一个简单的例子吗?
std::bitset
没有迭代器。如果有,它们不会是biterators吗?
std::bitset
没有迭代器。如果有,它们不会是biterators吗?哇,非常感谢Mariusz的帮助。我想知道,这到底是什么(int i:vector)mean?它是继承吗?还是仅仅用于for循环的语法?它意味着来自vector的每个int i。在这种情况下,您可以用:
for(int i=0;i
替换它,我们可以为(类型名称:container){对于所有我们可以迭代思想但关心bcs for(type name:container){}!=for(type&name:container){}的容器,如果你想了解更多,它被称为“基于范围的for”*通过…你有一篇关于它的好文章,所有的解释都解释了。哇,非常感谢Mariusz的帮助。我想知道,这到底是什么(int i:vector)mean?它是继承吗?还是仅仅用于for循环的语法?它意味着来自vector的每个int i。在这种情况下,您可以用:
for(int i=0;i
替换它,我们可以为(类型名称:container){对于我们可以迭代思想但关心bcs for(type name:container){}!=for(type&name:container){}的所有容器,如果您想了解更多信息,可以将其称为“基于范围的for”*通过……您有一篇关于它的好文章,所有内容都解释了。
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int myNumInInteger = 111;
    int baseOfMyNumInVector = 2;
    vector<int> myNumInVect;

    while (myNumInInteger > 0) { // using Horner Scheme for switching base
        myNumInVect.push_back(myNumInInteger % baseOfMyNumInVector);
        myNumInInteger /= baseOfMyNumInVector;
    }

    std::reverse(myNumInVect.begin(), myNumInVect.end()); // reverse (bcs there is no push_front() method in vector)

    if (myNumInVect.empty()) { // handling the 0 case
        myNumInVect.push_back(0);
    }

    for (auto digit : myNumInVect) { // write the result
        cout << digit;
    }
    return 0;
}