如何在运行时使用array <int,10>或array <int,4>?

时间:2019-12-19 14:01:59

标签: c++ arrays for-loop stdarray

我希望我的代码根据运行时值使用数组的短版本还是长版本(其中包含更多元素)。

for

如上所述,这是一个错误,因为三元运算符的参数不相同。

我该怎么做?

唯一的方法是声明两个已分配的开始和结束迭代器。但这会导致在迭代器上使用旧的for,并且需要在auto const& myBegin = useShortArray ? shortArray.begin() : longArray.begin(); auto const& myEnd = useShortArray ? shortArray.end() : longArray.end(); for( auto it = myBegin ; it != myEnd ; ++it ) { // use *it } 块中的每次使用时都取消引用迭代器。

sec_urls = []
filename = './2000Q1.csv'

with open(filename, newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for line in reader:
        url = line[4].strip()
        sec_urls.append(url)
        print(url, 'downloaded and added to list')

是否有某种写方法(也许将数组复制到向量上?)以避免恢复到开始/结束版本?

1 个答案:

答案 0 :(得分:6)

您可以使用lambda例如:

with open("/home/aaron/Documents/stackoverflow/test_NYC_taxi.csv", "r") as fares:
    for fare in fares:
        columns=fare.split(",")
        pickup=datetime.datetime.strptime(columns[0],"%Y-%m-%d").date()
        dropoff=datetime.datetime.strptime(columns[1],"%Y-%m-%d").date()
        distance=columns[2]
        fare=columns[3]
        p_long=columns[4]
        p_lat=columns[5]
        d_long=columns[6]
        d_lat=columns[7]

        session.execute(prepared, [pickup,dropoff,distance,fare,p_long,p_lat,d_long,d_lat])

#closing the file
fares.close()

#closing Cassandra connection
session.shutdown()

或者,如果您想给它起一个名字,它可以是模板函数。

另一种方法是使用跨度,例如C ++ 20中即将到来的auto doTheStuff = [](auto& myArray) { for(auto n : myArray) { // Do the stuff } }; useShortArray ? doTheStuff(shortArray) : doTheStuff(longArray); 。在这种方法中,接受不同大小数组的模板函数是span的构造函数。这样,使用范围的函数就不必是模板。