如何在C ++及其所有数据中同时设置向量?

时间:2012-07-17 16:08:33

标签: c++ vector

我编写了一些JavaScript代码,但现在我想将其转换为C ++,因为它具有性能,但我对C ++的了解很少。

在JavaScript中,我可以这样做:

var arr=[[['à','á'],['è','é'],['ì','í'],['ò','ó'],['ù','ú']],['a','e','i','o','u']];

我怎样才能在C ++中做类似的事情? 我必须做什么

vector<vector<char>> arr;

然后手动设置每个元素?

arr[0][0]='à';
arr[0][1]='á';
...

5 个答案:

答案 0 :(得分:7)

是的,除非你有C ++ 11,否则它至少会有一些工作,这增加了构造函数获取初始化列表的可能性:

std::vector<std::vector<char>> arr {{'a', 'b'}, {'c', 'd', 'e'}, {'f'}};

您也可以考虑将std::vector<char>替换为std::string

答案 1 :(得分:2)

这适用于C ++ 11

std::vector<std::vector<char>> var arr={{'à','á'},{'è','é'},{'ì','í'},{'ò','ó'},{'ù','ú'},{'a','e','i','o','u'}};
// Note it is changed from the original I removed one level of nesting from part of the array.

如果您使用的是C ++ 03 然后你需要稍微改变一下。

std::string var[] = {"àá'", "èé", "ìí", "òó", "ùú", "aeiou"};

类型有变化但效果相同,对象var的访问权限不变。

答案 2 :(得分:2)

或者,您可以使用std::vector< std::pair< char, char > >

注意,您不能在空向量上使用operator[](即调用arr[0]arr[0][0](因为请求的元素不在那里,您访问无效的内存(希望如此)会使你的程序崩溃)。使用push_back(...)

向元素添加元素
vector< pair< char, char > > arr;
arr.push_back( make_pair( 'à','á' ) );
arr.push_back( make_pair( 'è','é' ) );
arr.push_back( make_pair( 'ì','í' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ù','ú' ) );

根据您的要求,std::map< char, char >也可能对您有用。它允许您使用第一种类型作为键来访问元素,例如

std::map<char, char > mymap;
mymap['à'] = 'á';
// will print "Element à = à"
cout << "Element à = " <<  mymap['à']  << endl;

答案 3 :(得分:1)

不幸的是,您无法将矢量初始化为数组。但是,您可以使用数组初始化矢量。对于单个载体:

static const int arr[] = {1,2,3,4};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );

初始化向量向量有点棘手,但是您可以像上面那样在一个循环中执行它,或者像这样:(伪代码):

for( int i =0; i < something; i++ )//the outer vector
{
    vector.pushBack( std::vector<int> );
    for( int j =0; j < somethingElse; j++)
        vector[i].push_back(j);
}

答案 4 :(得分:0)

这是使用c ++ 0x的代码片段:

#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector< vector<char> > v = { {'a','b','c'}, {'d','e','f'} };
    for (unsigned i=0; i<v.size(); i++){
        cout <<"Subvector: ";
        for (unsigned j=0; j<v[i].size(); j++)
            cout << v[i][j];
        cout << endl;
    }

    return 0;
}

用g ++ -std = c ++ 0x

编译它